2013-02-06 2 views
2

filter_var 나는 PHP 함수 function_var()에 대한 fallowing의 테스트 케이스가 있습니다PHP FILTER_FLAG_ENCODE_HIGH

<?php 
$inputvalue = "Ž"; //NUM = 142 on the ASCII extended list 

$sanitized = filter_var($inputvalue, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH); 

echo 'The sanitized output: '.$sanitized."\n"; // --> & #197;& #189; (Å ½) 
?> 

당신은 출력이 내가 반환 할 기대되지 않습니다 위의 코드를 실행합니다. Ž은 ASCII 확장 목록에서 142입니다 (ascii-code [dot] com 참조). 그래서 내가 돌아올 것으로 기대하는 것은 '& # 142;'입니다. (문자열, 공백없이).

나는 무엇이 잘못되었는지 알아 내고 help을 얻었습니다. 아직 해결 방법을 모릅니다.

'Ž'을 16 진수 UTF-8 바이트로 변환하면 C5 BD가됩니다. 이 16 진수 바이트는 ISO-8859 16 진수 값과 일치합니다 : Å ½ (참조 : http://cs.stanford.edu/~miles/iso8859.html). 이 2 문자는 filter_var에 의해 '& # 197; & # 189; '.

이 onlineconverter를 참조하십시오! :

http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=%C5%BD&mode=char 그래서 기본적으로 무슨 일 : UTF-8 바이트 라틴 1 문자를 바이트로 변환하는 데 사용된다. 변환기 페이지는 "UTF-8 바이트를 라틴 -1 문자로"는 약 8 비트 문자만을 인식하는 터미널이나 편집기로 UTF-8 파일을 표시 할 때 일반적으로 나타나는 내용입니다.

제 편집자가 문제라고 생각하지 않습니다. 나는 Coda 2 (기본값으로 UTF-8)가있는 Mac을 사용하고 있습니다. 이 테스트는 메타 문자가 utf-8로 설정된 html5 페이지에서도 테스트되었습니다. 또한 default XAMPP localhost 서버를 사용하고 있습니다. 파이어 폭스에서 Firebug를 사용하여 파일이 UTF-8로 제공되었는지도 확인했다.

누구나이 인코딩 문제를 해결할 수있는 아이디어가 있습니까?

+0

이되어 있거나 사용자 입력 또는 데이터베이스에서 오는가? – Mike

+0

내가 틀렸다고 정정하되'htmlspecialchars()'로 충분하지 않습니까? – Pateman

+0

@pateman :. 아니, 단지'<> 않습니다 반드시 htmlspecialchars, "아무것도 인코딩 –

답변

0

나는 어떤 해결책도 찾지 못하고있다. email() 함수도 안전하지 않으며 phpmailer 또는 swiftmailer를 gona로 사용합니다 (그리고 나는 후자에 기대고 있습니다). `$는 inputvalue` 스크립트에 하드 코딩