PHP: использовать htmlspecialchars только между определенными маркерами

1

У меня есть строка с HTML-тегами в PHP-Variable, то есть:

 $str = '<html>
         <body>
         <div id="box1">[CODE]<span class="test">Hello World</span>[/CODE]</div>
         <div id="box2">[CODE]<strong class="test2">Nice to meet you!</strong>[/CODE]</div>
         </body>
         </html>';

Теперь я хочу проанализировать строку и использовать htmlspecialchars, но только внутри маркеров [CODE] и [/CODE]. Все теги вне маркеров следует игнорировать.

Результат должен быть:

$str = ' [...] <div id="box1">&lt;span class="test"&gt;Hello World&lt;/span&gt;</div> [...]';

Есть ли решение через preg_replace?

  • 0
    Возможно, вы захотите рассмотреть PHP BBcode вместо
  • 0
    Вы также хотите удалить код из строки?
Теги:
preg-match
preg-replace

2 ответа

4

Использовать preg_replace_callback

$str = '<html>
         <body>
         <div id="box1">[CODE]<span class="test">Hello 
         [CODE] World</span>[/CODE]</div>
         <div id="box2">[CODE]<strong class="test2">Nice to meet you!</strong>[/CODE]</div>
         </body>
         </html>';

echo preg_replace_callback ('/\[CODE\](.*?)\[\/CODE\]/s',  function ($matches) {return htmlspecialchars($matches[1]);}, $str);   

результат

<html>
         <head/><body>
         <div id="box1">&lt;span class=&quot;test&quot;&gt;Hello 
         [CODE] World&lt;/span&gt;</div>
         <div id="box2">&lt;strong class=&quot;test2&quot;&gt;Nice to meet you!&lt;/strong&gt;</div>
         </body>
         </html>
  • 0
    @PedroLobito В этом все дело. Это BB-код, поэтому вы хотите удалить теги BB-кода
  • 0
    Наверное, я неправильно понял вопрос.
Показать ещё 2 комментария
0

Это должно быть то, что вы ищете, также устраняя маркеры [CODE]:

<?php
$pattern = '/\[CODE\](.*)\[\/CODE\]/';
$replace = function($m) { return htmlspecialchars($m[1]); };
$subject = <<<EOT
<html>
<body>
<div id="box1">[CODE]<span class="test">Hello World</span>[/CODE]</div>
<div id="box2">[CODE]<strong class="test2">Nice to meet you!</strong>[/CODE]</div>
</body>
</html>
EOT;

echo preg_replace_callback($pattern, $replace, $subject);

Вышеуказанный результат:

<html>
<body>
<div id="box1">&lt;span class=&quot;test&quot;&gt;Hello World&lt;/span&gt;</div>
<div id="box2">&lt;strong class=&quot;test2&quot;&gt;Nice to meet you!&lt;/strong&gt;</div>
</body>
</html>
  • 0
    Интересно: анонимный голос за совершенно рабочий ответ. лол
  • 0
    Привет, Аркаша, я тестирую твой код, но, к сожалению, вывод содержит только части между тегами [CODE] и [/ CODE]. Все, что находится за пределами [CODE] -Tag, отсутствует. Что я делаю не так?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню