문제

지난 며칠 동안 저는 PHP 코드 기반을 Latin1에서 UTF-8로 변환하기 위해 노력해 왔습니다. 두 가지 주요 솔루션은 단일 바이트 함수를 내장 멀티 바이트 함수로 바꾸거나 php.ini 파일에서 mbstring.func_overload 값을 설정하는 것입니다.

그러나 나는 만났다 이것 스크립트와 문자열 리터럴이 UTF-8에서 인코딩되는 한, Thomasrutter의 게시물이 UTF-8에 실제로는 UTF-8에 필요한 것이 아니라는 것을 나타냅니다.

이것이 사실인지 아닌지 다른 증거를 찾지 못했고, 그것이 내 코드를 MB_Funtions로 변환 할 필요가 없다면 실시간 절약이 될 것입니다! 이것에 대해 약간의 빛을 발할 수 있습니까?

도움이 되었습니까?

해결책

모든 데이터가 UTF -8에서 100% 인 한 문제를 이해하는 한, 사용자 입력, 데이터베이스 및 특수 문자가있는 경우 PHP 파일 자체 인코딩을 의미합니다. 진실 검색 및 비교 작업에 적합합니다. @NTD가 지적했듯이, Multibyte strlen ()는 멀티 바이트 문자가 포함 된 문자열에서 실행될 때 잘못된 결과를 생성합니다.

이것 인코딩의 기본 사항에 대한 훌륭한 기사입니다.

다른 팁

당신이 어떤 것을 사용하지 않는 한 그들은 "필요한"것이 아닙니다. 그들이 대체하는 기능 (그리고 당신이 될 것입니다 ~이다 이들 중 적어도 하나를 사용하거나 그렇지 않으면 명시 적으로 확장 기능이 필요합니다. HTTP 처리.

UTF-8 규정 준수를 위해 노력할 때는 항상 PHP UTF-8 치트 시트 한 번의 추가 : PCRE 패턴을 사용하려면 업데이트해야합니다. u 수정 자.

멀티 바이트 문자열을 검사하거나 수정하자마자 MB_* 기능을 사용해야합니다. 이유를 보여주는 매우 빠른 예입니다.

$str = "abcžđščćöçefg";
mb_internal_encoding("UTF-8");

echo "strlen: ".strlen($str)."\n";
echo "mb_strlen: ".mb_strlen($str)."\n";

이것은 다음과 같이 인쇄합니다.

strlen: 20
mb_strlen: 13

Thomasrutter는 검색 특별한 취급이 필요하지 않습니다. 예를 들어 UTF8 문자열의 길이를 확인 해야하는 경우 평야를 사용하여 어떻게 할 수 있는지 알 수 없습니다. strlen().

MB_STRTOUPPER와 같은 기능도 필요할 수 있습니다. Strtoupper는 Á를 Á로 변환하지 않습니다.

문자열이 단일 바이트가 될 것으로 예상되는 여러 기능이 있습니다 (일부는 ISO-8859-1이라고 가정). 이 경우, 당신이하고있는 일을 알고 교체 기능을 사용해야합니다. 다음에는 상당히 포괄적 인 목록이 있습니다. http://www.phpwact.org/php/i18n/utf-8

PHP에서 멀티 바이트 함수를 확장하는 MBFunctions 라이브러리를 사용할 수 있습니다.

http://code.google.com/p/mbfunctions/

당신은 이것을 사용할 수 있습니다http://php.net/manual/en/mbstring.overload.phpphp.ini 파일로 설정하므로 코드를 변경할 필요가 없습니다.

그러나 모든 문자열 함수가 자동으로 변경되지는 않기 때문에주의하십시오. 이것은 하나입니다 : http://php.net/manual/en/function.substr-replace.php

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top