Странное поведение htmlspecialchars в моем классе парсера bbcode - PullRequest
0 голосов
/ 27 декабря 2011

Я написал класс для разбора bbcode, но у меня возникла проблема, когда я использую «escape» (функция chtml :: encode является оберткой для htmlspecialchars).

MyBBcodeParser: http://snipt.org/srlo0

Кейс "BBcodeParser :: toHtml ($ input, false)": Input: [b]hello[/b] <strong>hello2</strong> Output: <strong>hello</strong> <strong>hello2</strong> (жирным шрифтом)

Кейс "BBcodeParser :: toHtml ($ inputправда) ": Input: [b]hello[/b] <strong>hello2</strong> Output: &lt;strong&gt;hello&lt;/strong&gt;&amp;lt;strong&amp;gt;hello2&amp;lt;/strong&amp;gt;

Не могу понять двойной выход из второго случая ...

1 Ответ

2 голосов
/ 27 декабря 2011

Хорошо, если вы вызываете BBcodeParser::toHtml($input, true) со своим вводом, тогда возвращается следующее:

<strong>hello</strong> &lt;strong&gt;hello2&lt;/strong&gt;

Это потому, что CHtml::encode применяется перед preg_replace, оставляя созданный HTML-кодпосле того, как от BBcode нетронутым, при экранировании HTML-кода из входных данных (секунд <strong>, этот вокруг hello2).

Теперь, если вы снова примените CHtml::encode к результату"Escape" BBcode становится таким, как вы отправили (обратите внимание на &lt; в первом сильном и &amp;lt; во втором):

&lt;strong&gt;hello&lt;/strong&gt;&amp;lt;strong&amp;gt;hello2&amp;lt;/strong&amp;gt;

В первом случае кажется, что кодировки вообще нет.

...