2011-12-27 8 views
0

bbcode를 구문 분석 할 클래스를 작성했지만 "escape"(function chtml :: encode는 htmlspecialchars의 래퍼)를 사용할 때 문제가 있습니다.내 bbcode 파서 클래스의 htmlspecialchars의 이상한 동작

MyBBcodeParser : http://snipt.org/srlo0

케이스 "BBcodeParser :: toHtml ($ false로 입력)" Input: [b]hello[/b] <strong>hello2</strong> Output: <strong>hello</strong> <strong>hello2</strong> (굵게 적용)

케이스 "BBcodeParser :: toHtml ($ 입력, ") 사실 : 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;

I 다음이 반환 한 다음 입력을 BBcodeParser::toHtml($input, true) 전화를 잘하면 ... 두 번째 경우에서

+0

첫 번째 경우에 그러한 출력을 제공하지 않아야합니다. BBCode 태그를 닫지 않았습니다. '[b] hello [/ b]' –

+0

죄송합니다. 여기서 썼을 때 저의 실수는 제 테스트에서 닫힙니다. [b]. 편집 됨. – Diego

답변

2

을 이중 탈출을 이해할 수 없다 :

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

이것은 CHtml::encode가 preg_replace이다 전에 적용되기 때문에, 따라서 입력에서 HTML 코드 (초 <strong>, 그 중 하나는 hello2)를 이스케이프하면서 BB 코드에서 그대로 생성 된 HTML 코드를 그대로 남겨 둡니다.

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

을 처음으로 : 이제

는 "탈출"의 결과에 다시 CHtml::encode를 적용하는 경우는 BBCode는 그것은 당신이 게시처럼 (첫 번째 강력한에서 &lt; 두 번째의 &amp;lt; 통지)가된다 인코딩이 전혀없는 것 같습니다.

+0

기다려, 기다려 ...! 'BBcodeParser :: toHtml 함께 ($ 입력, 참) '의 출력은 : '< 강한 > 헬로 </강한 > & LT; 강한 &한다 hello2 & LT/&된다 강한;'. 내가 예상하는 동안 ** 안녕하세요 ** < 강력한 > hello2 </STRONG > – Diego

+1

@Diego : 나는'BBcodeParser' 소스를 보면 다른 하나는 코드의 당신의 부분에 있어야합니다, 그래서 하나는 "탈출"이 . 우리가 그것을 확인할 수 있도록 게시 할 수 있습니까? – vstm

+0

나는 다른 곳에서 어떤 종류의 인코딩도 만들어지지 않았기 때문에 여기서 썼다. 사실 encode가 false로 설정되면 다른 유형의 인코딩이 없습니다. html은 encode가 false 인 경우 삽입되어 작성됩니다. '$ 텍스트 = "[B] 헬로 [/ B] hello2'; ' '에코 BBcodeParser :: toHtml ($ 텍스트, TRUE);' 출력'< 강한 > 헬로 </강한 > & LT ; 강한 &한다 hello2 & LT/강한 & A MP;된다' – Diego