2012-03-24 2 views
1

PHP 스크립트를 구현했습니다.
PHP 스크립트를 다음 URL을 통해 실행합니다. http://server/script.php?param1=%80t%80PHP + 문자 인코딩 + GET 매개 변수

PHP 스크립트에 GET 매개 변수를 전달합니다.
매개 변수의 이름은 param1입니다.
param1은 "% 80t % 80"으로 URL 인코딩 된 "€ t €"문자열을 포함합니다.

내 PHP 스크립트는 UTF-8 표준으로 인코딩됩니다.
$ _GET [ "param1"]에 포함 된 문자열에 어떤 문자 인코딩이 적용되는지 궁금합니다.

$ _GET [ "param1"]의 문자 인코딩이 UTF-8이 아닌지 확인하십시오.
그 이유는 내 PHP 스크립트의 다음 명령이 $ _GET [ "param1"]의 16 진수 표현 인 "80 74 80"이됩니다. $ _GET [ "PARAM1"]에 문자 인코딩은 UTF-8 인 경우

var_dump(unpack("H*", $_GET["param1"])); 

는 이전 PHP 명령 "E2 AC 82 74 82 AC E2"을 초래할 것이다.

유로 기호가 IS0-8859-1 문자 세트에 포함되어 있지 않기 때문에 $ _GET [ "param1"]의 문자 인코딩은 ISO-8859-1이 아닙니다.
ISO-8859-1 인코딩 테이블을 보려면 http://en.wikipedia.org/wiki/ISO/IEC_8859-1
IS0-8859-1이기 때문에 mb_internal_encoding 함수가 반환 한 PHP 내부 인코딩이 $ _GET [ "param1"]에 적용되지 않습니다.

누구나 $ _GET [ "param1"]에 포함 된 문자열에 어떤 문자 인코딩이 적용되는지 알고 있습니까?

+0

을 사용하고 있습니까? – Andreas

답변

0

해결하려는 문자 인코딩 문제를 해결하는 동안 압축 해제를 사용하는 이유를 잘 모르겠습니다. 그래서 여기 난 당신이 $ _GET의 값을 읽으려고한다고 가정

... 간다 [ 'PARAM1']처럼 뭔가 :

$ VAR = $ _GET [ 'PARAM1']; urldecode $ var = urldecode ($ _GET [ 'param1'])를 시도한 다음 멀티 바이트 문자열 처리를 위해 http://gr.php.net/manual/en/ref.mbstring.php 함수를 사용하거나 iconv 함수를 사용하는 것이 좋습니다.

희망 사항이 도움이됩니다.

+0

테스트 목적으로 만 언팩 기능을 사용했습니다. param1에 포함 된 문자열을 나타내는 바이트를 확인해야했습니다. 최종 목표는 GET 매개 변수에서받은 각 문자열을 UTF-8로 인코딩하는 것입니다. mb_convert_encoding PHP 함수를 사용할 계획 이었지만 GET 배열의 문자열을 나타 내기 위해 처음 엔 어떤 인코딩이 사용되었는지 알아야합니다. – user1139666

0

확실히 $ _GET [ "param1"]의 문자 인코딩은 UTF-8이 아닙니다. 이유 : PHP 스크립트의 다음 명령이 "80 74 80" 인데, $ _GET [ "param1"]의 16 진수 표현입니다.

작성한 내용이기 때문에 기대했던 것입니다. 매개 변수 % 80t % 80은 세 문자를 의미합니다 : hex 80, "t", hex 80. % 80은 "hex 80"을 의미합니다. 특정 16 진수 값을 수동으로 지정 했으므로 문자 인코딩이 여기에 전혀 포함되지 않습니다.

이 시도 :

var_dump(unpack ("H*", urldecode("%80t%80"))); 

그리고이 왜 압축 풀기를

http://server/script.php?param1=%e2%82%ac%74%e2%82%ac