2009-07-28 2 views
0

다음 문자열을 고려하십시오. UTF-16-LE로 인코딩되어 PHP 변수에 저장됩니다.을 작은 따옴표로 바꾸려면 mbstring 또는 iconv를 얻지 못했습니다. 그것을 sanatize하는 것이 좋은 방법이 될 것입니다.PHP UTF-16에서 ASCII로 변환

문자열 : 칼 세이건 (Carl Sagan) '의 우주 연결

+0

해결되었습니다. UTF-16-LE => UTF-16 대신 작은 변형으로 mb_convert_encoding을 사용했으며 출력 인코딩은 ASCII (ISO-8859) 대신 PHP의 내부 UTF-8로 설정되었습니다. – gnosio

답변

1

내가 질문을 오해하고있어 않는 한, '는 UTF-16 문제가되지 않습니다. 이 문자열에는 htmlspecialchars() 또는 htmlentities()이 실행되고 작은 따옴표는 html 엔터티 represenation '으로 변환되었습니다.

정상으로 돌아 오려면 html_entity_decode()해야합니다.

일반적으로 출력시 html 인코딩 만 수행하면 이러한 종류의 변환이 지속되지 않습니다. 이러한 종류의 문자열을 얻기 위해 어딘가에 HTML 입력을 사용하는 경우 UTF 변환 및 저장을 수행하기 전에 엔티티를 디코딩해야 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다.하지만하지 않습니다. 심지어 단순한 str_replace는 위의 결론을 이끌어내는 작업을 거부합니다. – gnosio

+2

문자열 함수가있는 UTF-16에 대한 지원은 매우 낮습니다. 나는 당신이 당신의 UTF-16 문자열을 html_entity_decode()에 의해 처리 될 수있는 인코딩으로 변환해야 할 것이라고 생각한다. '$ str = html_entity_decode (iconv ('UTF-16', 'UTF-8', $ str), ENT_QUOTES, 'UTF-8')와 같은 것입니다. 그런 다음 필요에 따라 UTF-16으로 다시 변환 할 수 있습니다. 이 모든 변환이 사용자의 목적에 부합하는지 여부는 확실하지 않지만 기본 문자열 기능을 사용하여 UTF-16에서 작동 할 수는 없다는 점에 당황합니다. – zombat

+0

@ zombat, 'iconv'팁 +1. 그건 내가 누락 된 것이었다. – pieman72

관련 문제