PHP - закодировать все внутри тега <code> - PullRequest
0 голосов
/ 14 мая 2018

Я просто хочу сделать свой блог настолько простым, насколько это возможно. И мой вопрос:

Как (если это возможно) кодировать все, что находится внутри тега HTML <code> с помощью htmlentities();

Я хочу это: Если я сделаю пост о создании чего-либо, мне не нужно будет кодировать его каким-нибудь кодировщиком онлайн, а просто сделаю что-то вроде

"Just simply put
<code>
encoded code
</code>
and this <b>bold</b> text will be bold, because it isn't inside <code>

возможно ли в php-коде использовать некую функцию, подобную

encode_tags($text,"<code>","</code>");

1 Ответ

0 голосов
/ 15 мая 2018

Ваша строка ввода (незначительно отредактирована для уточнения моего ответа):

$string = "Just simply put
<code>
<p>encoded code</p>
</code>
and this <b>bold</b> text will be bold, 
because it isn't inside <code><b>code tags</b></code>";

Шаг 1:
Разбейте вашу строку на части, окруженные <code>. Обратите внимание, что ваше регулярное выражение должно использовать #, а не / в качестве разделителей, поэтому вам не нужно заботиться о / в вашем .

 preg_match_all("#<code>(.*?)</code>#is", $string, $codes);

Обратите внимание на s в конце REGEX для игнорирования разрывов строк в группе (*).

Приведенный выше код является ленивым (см. Ссылки внизу) и также не будет соответствовать неполным тегам (например, <code> без соответствующих ).

Шаг 2:
Внесите необходимые изменения в HTML для каждой из найденных подстрок (вы должны быть знакомы с тем, как preg_match_all возвращает данные из функции, см. Ссылку внизу):

$replace = [];
foreach($codes[1] as $key=>$codeBlock ){
    $replace[$key] = htmlentities($codeBlock, ENT_QUOTES, "UTF-8", false);
}
unset($key, $codeBlock);

Шаг 3:
Примените изменения к исходным значениям (тезисы НЕ совпадают с преобразованными значениями, использованными на шаге 2):

foreach($codes[0] as $key=>$replacer){
    $string = str_replace($replacer, $replace[$key], $string);
}
unset($key, $replacer, $replace);

Выход:

Выше будет выведено:

Просто введите

кодированный код

и этот полужирный текст будет полужирным, потому что он не внутри кодовых тегов


У вас должно быть знакомое понимание preg_match _ * семейства функций PHP, а также общих PCRE REGEX .

Пожалуйста, также прочитайте это здесь , и здесь и прочитайте это и особенно это .

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...