Допустим, что у нас есть следующий текст, помещённый в переменную: [QUOTE name=hardway]text[/QUOTE]Мне нужно, чтобы из этого текста копировалось значение name (в моём случае — hardway) в переменную $name и удалялось всё, начиная от пробела после [QUOTE и до ]. После остаётся следующая строка: [QUOTE]text[/QUOTE]Далее заменяем [QUOTE] и [/QUOTE] на <div class="title_quo fs12"><div class="mgb7">Сообщение от <strong>'.$name.'</strong></div><em> и </em></div> соответственно.Реализовал я это всё следующим кодом: PHP: $text = '[QUOTE name=hardway]text[/QUOTE]'; $res = mb_strpos($text, '[QUOTE name='); if ($res || $res == 0) { $start = $res + 12; $p = $start; for ($x = 0; $x < 20; $x++) { if (mb_substr($text, $p, 1, 'utf-8') != ']') $p++; else break; } $quo_2 = mb_strpos($text, '[/QUOTE]'); if (mb_substr($text, $start, 1, 'utf-8') == ']' && $quo_2) { $length = $p - $start; $name = mb_substr($text, $start, $length); $text = str_replace($name, '', $text); $text = str_replace(' name=', '', $text); $replace_1 = '<div class="title_quo fs12"><div class="mgb7">Сообщение от <strong>'.$name.'</strong></div><em>'; $replace_2 = '</em></div>'; $text = str_replace('[QUOTE]', $replace_1, $text); $text = str_replace('[/QUOTE]', $replace_2, $text); $ex = mb_strpos($text, '</em></div>'); $ex = $ex + 10; $text_quo = mb_substr($text, $res, $ex); } } echo $text_quo Но, по какой-то мне непонятной причине, на выходе я получаю это: </strong>hardway]text[/QUOTE] вместо этого: <div class="title_quo fs12"><div class="mgb7">Сообщение от <strong>hardway</strong></div><em>text</em></div>Единственное, что я понял, так это то, что в переменной length не записывается разница переменных p и start, но почему это так происходит — хз, ведь переменная p — 19, а start — 12, то есть в результате должно быть 7
В 11й строчке вместо $start по идее должно быть $p 22я строчка вообще непонятно зачем Но лично я сделал бы так: quote.html HTML: <div class="title_quo fs12"> <div class="mgb7"> Сообщение от <strong>{name}</strong> </div> <em>{text}</em> </div> quote.php PHP: $text = '[QUOTE name=hardway]text[/QUOTE]'; $reg = '/\[QUOTE\s+name=(\w+)\]([^\[]*)\[\/QUOTE\]/ui'; if (preg_match($reg, $text, $matches)) { $html = file_get_contents('quote.html'); echo str_replace(['{name}', '{text}'], array_slice($matches, 1), $html); }