개발-PHP

[함수] htmlspecialchars_decode와 html_entity_decode의 문자열 처리의 다른 점

WEBKIKIS 2016. 3. 30. 17:17
반응형

[함수] htmlspecialchars_decode와 html_entity_decode의 문자열 처리의 다른 점


php에서 Special HTML entities를 decode 하기위헤 일반적으로 htmlspecialchars_decode를 많이 사용하실 텐데요. 이 함수를 사용시에는 ' '를 공백으로 변환하지 않습니다. 이런 경우에는 html_entity_decode 함수를 사용하면 공백도 변환이 됩니다.

이 두함수의 차이는 메뉴얼에 나와있습니다만 요약하자면 html_entity_decode는 모든 html entities를 변환하고 htmlspecialchars_decode는 메뉴얼에 안내된 html entities만 변환한다는 것입니다.

결론은 decode 시에 상황에 따라 함수를 선택하면 되는데   등과 같은 모든 문자를 변환하려면  html_entity_decode를 사용하는게 좋다는 겁니다.

그런데 문제가 한가지 있는데 html_entity_decode 함수는  를 일반 공백으로 변환시키지 않습니다.

메뉴얼에 다음과 같이 설명되어 있습니다.

You might wonder why trim(html_entity_decode(‘ ’)); doesn’t reduce the string to an empty string, that’s because the ‘ ’ entity is not ASCII code 32 (which is stripped by trim()) but ASCII code 160 (0xa0) in the default ISO 8859-1 encoding.

따라서 약간의 처리가 더 필요합니다. 참고소스를 확인하시면 어떻게 사용해야하는지 이해가 되실 것으로 생각됩니다.
사실  만 처리하면 된다면 더 간단하게 str_replace(' ', ' ', $str)로 해결해도 됩니다만 여러가지 상황을 고려한다면 보다 정확한 함수를 사용하는 것이 좋을 것 같네요.

위의 소스는 메뉴얼에 설명대로 default_charset이 ISO-8859-1인 경우에 대한 결과를 확인하기 위한 예시이고 아래는 일반적인 환경인 UTF-8에서의 결과를 화인하기 위한 예시입니다. 긴 설명은 필요없을 듯 합니다만 혹 조금 더 자세한 내용을 확인하고 싶으시면 위쪽에 링크1을 참조하시면 됩니다.



<?php
// default_charset : ISO-8859-1
$str = trim(str_replace("\xa0", "", html_entity_decode(iconv('UTF-8', 'ISO-8859-1', "&nbsp;X&nbsp;"))));
echo (strcmp($str, 'X') == 0) ? 'ok' : 'oops';
?>
 
<?php
// default_charset : UTF-8
$str = trim(str_replace("\xc2\xa0", "", html_entity_decode("&nbsp;X&nbsp;")));
echo (strcmp($str, 'X') == 0) ? 'ok' : 'oops';
?>



웹 솔루션 개발 문의하기 >>

반응형