2012-09-18 3 views
5

htmlencoded 방식으로 출력하려고하는 문자열이 있고 htmlentities() function은 항상 빈 문자열을 반환합니다.htmlentities에서 PHP 5.4의 새 상수 ENT_DISALLOWED 사용

나는 그것이 그렇게하는 이유를 정확히 알고 있습니다. 글쎄, 나는 PHP 5.4를 실행하지 않고있다. 나는 최신 PHP 5.3을 설치했다.

질문은 잘못된 코드 단위 시퀀스가있는 문자열을 어떻게 htmlencode 할 수 있는지입니다.

설명서에 따르면 ENT_SUBSTITUTE이 좋습니다. 그러나이 상수는 PHP 5.3.X에서 정의되지 않았습니다. 운이 여전히

if (!defined('ENT_SUBSTITUTE')) { 
    define('ENT_SUBSTITUTE', 8); 
} 

:

나는 이것을하지 않았다. htmlentities은 여전히 ​​빈 문자열을 반환합니다.

대신 ENT_DISALLOWED을 사용해보고 싶었지만 해당 긴 값을 찾을 수 없습니다.

그래서 제 질문은 두

  1. PHP 5.4의 ENT_DISALLOWED의 상수 값은 무엇입니까

    를 접혀?

  2. UTF-8이 아닌 문자 (예 : smart quotes)가 포함 된 문자열을 삭제할 수있는 방법은 무엇입니까? - 똑똑한 따옴표뿐만 아니라 htmlentities()이 빈 문자열을 반환하는 원인.

답변

2

여러분이 말한 것처럼,이 상수는 were added5.4.0입니다. 문제는 5.4.0에 대한 새로운 지원입니다. 원하는 모든 값을 전달할 수 있음을 의미합니다. 이전 값 htmlentities은 이해할 수 없습니다.

대부분의 경우 인 것처럼 php changelog는 오해의 소지가 있습니다.

3

PHP 5.3의 htmlentities()에는 ENT_SUBSTITUTE 플래그가 없지만 실제로는 제안되지 않은 ENT_IGNORE 플래그가 있습니다. 메모를 작성하고 사용하기 전에 이해해야합니다.

이 플래그를 사용하는 것은 » may have security implications으로 사용하지 마십시오.

처음에는 입력 문자열에 문제가있는 이유를 이해하는 것이 훨씬 더 좋습니다. 대부분의 경우 올바른 인코딩을 지정하기 위해 사용자가 누락됩니다.

예. 먼저 문자열을 UTF-8로 다시 인코딩 한 다음 htmlspecialchars() 또는 htmlentities()으로 전달하십시오. 똑똑한 따옴표로 말하면 아마도 Windows-1252로 인코딩 된 문자열을 사용하고있을 것입니다. 당신은 사용하기 전에 하나, 그냥 제대로 캐릭터 세트를 지정할 수 있다는 변환 (PHP 5.3)가 필요하지 않습니다

htmlentities($string, ENT_QUOTES, $encoding = 'Windows-1252'); 

는 당연히 이것은 단지 $string가 인코딩되어 입력되면 Windows-1252을 작동 (CP1252).올바른 인코딩을 먼저 확인하십시오. 그러면 일반적으로 문제가 없습니다. 지원되지 않는 인코딩의 경우 지원되는 인코딩으로 다시 인코딩됩니다 (예 : iconv 또는 mb_string).

+0

누군가가 Lynda.com MYSQL Essential Training을 따르고 Sid.php의 600 행에 "정의되지 않은 상수 ENT_SUBSTITUTE 사용"오류가 발생하여이 문제가 발생하는 경우, 여기를 읽은 내용을 기반으로 알려 드리겠습니다. 그리고 PHP 5.3에 대한 명확한 동등한 플래그를 찾을 수 없다는 것을 알았습니다. 나는 그 플래그를 삭제하고 app이 이제는 잘 작동합니다. @hakre가 지적한 바와 같이 보안 관련 사항이 있지만 웹에 액세스 할 수없는 로컬 개발 서버에서 작업하고 있습니다. –