2012-10-16 2 views
4

η의 URL 인코딩은 %CE%B7입니다. 하지만 PHP에서 쓸 때 이상한 기호가 생깁니다. echo urldecode("%ce%b7");PHP의 urlencode가 다른 URL 인코딩을 사용하는 이유는 무엇입니까?

대신에 echo urlencode("η");을 쓰면 %26%23951%3B이됩니다. %CE%B7을 사용할 수없는 이유는 무엇입니까?

문제점

솔루션은 우리가 TYPO3을 사용하는 것입니다. 일부에서는 내부 처리에 유니 코드를 사용하지 않습니다. typo3에 $TYPO3_CONF_VARS['BE']['forceCharset'] = 'utf-8';을 설정하자마자 echo urldecode("%ce%b7");의 결과가 정확합니다.

echo urlencode("η");이 나에게주는 메시지 %26%23951%3B은 Joni의 답변을 참조하십시오.

답변

7

urldecode("%ce%b7")이 UTF-8으로 인코딩 η 을 생산하고 시도 할 수 있습니다. 다른 인코딩으로 출력을 보는 경우 다른 것을 볼 수 있습니다.

한편, %26%23951%3B을 디코딩하면 η을 얻지 못하는 것이 사실입니다. η에 대한 HTML 엔티티 코드 인 η을 얻습니다. 엔티티 코드는 html_entity_decode을 사용하여 디코딩 :

echo html_entity_decode('η', false, 'UTF-8'); // prints η, encoded in UTF-8 
+0

불행하게도,'에코의 html_entity_decode ('η'거짓 'UTF-8');'η를 인쇄하지 않습니다. 이미'header ('Content-Type : text/html; charset = utf-8');가 포함되어 있습니다. 그리고 브라우저는 유니 코드로 보여주는 것처럼 가장합니다. 사실,'echo urldecode ("% 26 % 23951 % 3B");는 η를 출력합니다. – Raoul

+0

실제로'echo urldecode ("% 26 % 23951 % 3B")'는'η'을 출력합니다. 웹 브라우저에서 결과를 보는 경우, 브라우저는이 여러 문자의 시퀀스를 'η'로 표시합니다. 브라우저가'Content-Type' 헤더에도 불구하고 올바르게 인코딩 된 UTF-8 문자를 표시하는 것을 거부하는 이유는 페이지를 보지 않고도 말하기 어렵습니다. – Joni

+0

좋아요, 이제 제 문제를 봅니다. 그 점을 지적 해 주셔서 감사합니다. 하지만 여전히'echo urldecode ("% ce % b7");가 왜 올바르게 표시되지 않는지 이해할 수 없습니다. – Raoul

2

는 다음과 같은

header('Content-Type: text/html; charset=utf-8'); 
echo urldecode("%ce%b7"); // output : η 

See Live Demo

관련 문제