2010-07-04 4 views
3

나는 내 작은 웹 응용 프로그램의 리팩토링을 다루고 있었다. 밤새. 오늘 테스트를 시작했을 때, 내가 발견 한 첫 번째 버그는 시스템 PHP 함수 nl2br()에 문제가있었습니다. 내 로컬 호스트에PHP 함수에서 이상한 동작 nl2br

나는 PHP 버전을 5.2.9을하고 난 버전에서 PHP site에 참조로 4.0.5nl2br() 준수 XHTML입니다.

그럼 왜 내 nl2br() 반환 <br><br /> 대신 false로 설정된 두 번째 인수없이 반환 이해하지 않습니다. 나는 당신이이 기능을 달성하기 위해 노력하고 이해 확실하지 않다

public function eliminateTags($msg) { 
    $setBrakes = nl2br($msg); 
    $decodeHTML = htmlspecialchars_decode($setBrakes); 

    # Check PHP version 
    if((int)version_compare(PHP_VERSION, '4.0.5') == 1) { 
     $withoutTags = strip_tags($decodeHTML, '<br />'); 
    } else { 
     $withoutTags = strip_tags($decodeHTML, '<br>'); 
    } 

    return $withoutTags; 
} 
+2

나는 최신 PHP 5.2로 이것을 재현 할 수 없다고 말할 수 없다. changelog는 이것에 관해 아무 말도하지 않는다. 이 문제를 재현하는 스크립트가 있습니까? – Artefacto

+1

br 태그를 어떻게 확인하고 있습니까? # Firebug (또는 이와 유사한 도구)를 사용하고 있습니까? # 스크립트로 생성 된 파일을 찾고 있습니까? # 스크립트로 생성 된 문자열을 확인하고 있습니까? – Eineki

+0

나를 위해 기본값으로 '
'을 사용하고, 5.3.2를 사용합니다. –

답변

4

:

는 여기에이 버그를 발견 나의 방법이다. 먼저 새 줄마다 HTML 나누기를 삽입 한 다음 나누기를 제외한 모든 태그를 제거합니다.

태그를 먼저 제거한 다음 HTML 줄 바꿈을 삽입하는 것이 더 현명하지 않습니까?

public function eliminateTags($msg) { 
    $decodeHTML = htmlspecialchars_decode($msg); 
    $withoutTags = strip_tags($decodeHTML); 
    $setBreaks = nl2br($withoutTags); 

    return $setBreaks; 
} 

편집 :

은 분명히 제대로 strip_tags()을 사용하고 있지 않습니다. 제외시킬 태그를 PHP에 묻어야합니다 (<br>이 아니라 <br />). <br />을 제외하도록 PHP에 요청하는 것은 작동하지 않는 <p></p>을 제외하는 것과 같습니다.

즉, PHP 버전을 확인하지 않아야합니다. strip_tags()은 모든 버전에서 그대로 작동합니다.

+0

관측을위한 +1 – Eineki

+1

실제로는 대답이 아닙니다. – Artefacto

+0

오키. 하지만 다른 방법을 시도했을 때 문제가 될 수 있습니까? 원치 않는 태그를 제거하는 방법을 만들고 싶었습니다. 예를 들어''하지만이 메소드를 사용하면'alret();'을 반환 할 것입니다. – Eugene