2014-12-29 1 views
0

중국어 문자에서 유니 코드로 변환해야하는 자체 프로젝트에서 작업 중입니다. 나는 사용자 입력, 결과는 방식으로 다른 있던 문자를 변환하는 양식을 추가하려고으로bin2hex가 psot 함수를 사용하여 다른 결과를 반환합니다.

현재, 난,

base_convert(bin2hex(iconv("utf-8", "ucs-4", '人')), 16, 16) // Return 4eba 

그러나 문제없이 아래의 코드를 사용하고

base_convert(bin2hex(iconv("utf-8", "ucs-4", $_POST["char"])), 16, 16) // Return 2600000023000000000000000000000000000000000000000000000000 

미리 감사드립니다!

+0

'base_convert()'는 개개인의 문자에 대해서는 괜찮을지 만 실제 문자열로는 적합하지 않으므로'PHP_INT_MAX'보다 큰 정수를 얻 자마자 곤란을 겪을 수 있기 때문에 일반 문자열에는 부적합합니다. –

답변

0

$_POST 배열에 UTF-8을 가져 오려면 양식이 UTF-8로 제출되어야한다고 브라우저에 알려야합니다.

일반적으로이를 달성하는 방법은 페이지가 UTF-8로 인코딩되었음을 표시하는 양식이 포함 된 페이지를 제공하는 것입니다. 그렇지 않으면, 브라우저는 임의의 인코딩이 사용 중인지를 임의로 추측 할 것이며, 추측은 아마 UTF-8이 아닐 것입니다. UTF-8을 나타 내기 위해이 Content-Type 헤더를 설정하거나 <head>에 포함 :

<meta charset="utf-8"/> 

폼 필드에 문자 을 포함하는 경우 브라우저는 인코딩이 포함되지 않습니다 (CP1252 서유럽과 같은) 하나입니다 생각 문자 을 입력하면 패닉을 일으켜 대신 HTML 문자 참조 인코딩 버전 인 &#20154;을 보냅니다. 원래 입력이 또는 &#20154;인지 여부를 알 수 없기 때문에 이것은 유용하지 않은 데이터 맹 글링이지만 역사적인 브라우저 버크입니다.

이 때문에 2600000023000000 : U + 0026, U + 0023이 그 맹 글링 된 버전의 선두 &#입니다. 이 문자열의 나머지 부분은 00이고 그 뒤에 나오는 문자가 아닙니다. base_convert은 부동 소수점 숫자를 처리하고 0x2600000023000000000000000000000000000000000000000000000000은 정밀도를 유지하기에 너무 큰 숫자입니다.

UTF-8로 인코딩 된 문자를 숫자 코드 포인트로 변환하려는 경우 uniord/unichr을 시도하십시오.

관련 문제