다른 문자 인코딩은 메모리에서 다른 바이트 수를 차지한다는 것을 누구나 알고 있습니다. 예를 들어, ASCII로 인코딩된 문자는 1바이트를 차지하고, UTF-8로 인코딩된 중국어 문자는 3바이트, GBK는 2바이트를 차지합니다. PHP에는 여러 문자열 차단 기능도 포함되어 있으며 그 중 substr 및 mb_substr이 일반적으로 사용됩니다.
substr을 사용하여 한자를 가로채면 문자가 깨져서 나타납니다. 이는 substr이 바이트 단위로 가로채기 때문입니다. 즉, substr을 사용하여 가로채는 UTF-8 인코딩 중국어는 중국어의 1/3만 가로채고 잘못된 문자가 나타납니다.
mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) $encoding 매개 변수는 인코딩을 지정할 수 있습니다. 생략하면 내부 문자 인코딩이 사용됩니다.
문자열의 인코딩 형식을 모르는 경우 mb_Detect_encoding으로 확인할 수 있습니다.
$encoding = mb_Detect_encoding($string, array("ASCII",'UTF-8′,"GB2312′,"GBK ",'BIG5′ ); 이 함수는
ord(substr($str, $i, 1)) > 0xa0)
ord($string)을 사용하여 문자열의 첫 번째 문자의 ASC 코드를 반환합니다. 가로채는 문자열의 첫 번째 문자를 결정하는 데 사용됩니다. 예를 들어 gb2312로 인코딩된 텍스트는 2바이트이고 utf8은 3바이트이므로 인코딩이 256보다 크면 문자입니다.
정규 문자:
일치하는 한자: preg_match_all('/[x80-xff ]?./', $string, $match)
일치하는 영어: preg_match_all("/[/x01- /x7f]+/", $string, $match);
인코딩 변환
iconv( string $ in_charset , string $out_charset , string $str )
GB2312에서 UTF-8로: iconv("GB2312", "UTF-8",$text)
url 인코딩 urlencode
인코딩 후 반환된 문자열 - _를 제외한 모든 영숫자가 아닌 문자는 퍼센트 기호(%) 뒤에 2개의 16진수 숫자로 대체되고 공백이 인코딩됩니다. 더하기 기호(+)가 있는 인코딩입니다. _의 인코딩과 동일합니다. WWW 형식 POST 데이터의 인코딩 방법은 동일하며, application/x-www-form-urlencoded의 미디어 유형 인코딩 방법은 동일합니다.
그러나 인코딩 시에는 URL의 일부만 인코딩되어야 합니다. 그렇지 않으면 URL의 콜론과 백슬래시도 이스케이프됩니다.
URLEncode에는 일반적으로 두 가지 방법이 있습니다. 하나는 GB2312 기반의 전통적인 인코딩이고 다른 하나는 UTF-8 기반의 인코딩입니다. 예:
$url = '中国'; echo urlencode($url ); //UTF-8: %E4%B8%AD%E5%9B%BD //GB2312:%D6%D0%B9%FA
예를 들어 브라우저를 사용하여 Baidu를 열고 주소 표시줄에 다음이 표시됩니다.
http://www.baidu.com/s?wd=%E4% B8%AD%E5%9B %BD&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=16&rsv_sug=0&rsv_sug4=302&rsv_sug1=11&inputT=22928
즉, "China"가 브라우저에 의해 자동으로 변환되는 것을 볼 수 있습니다. 대상: %E4%B8%AD%E5 %9B%BD.
urlencode와 rawurlencode의 차이점: urlencode는 공백을 더하기 기호 "+"로 인코딩하고 rawurlencode는 공백을 더하기 기호 "%20"으로 인코딩합니다.
urldecode urldecode 및 rawurldecode
1. 디코딩할 때 해당하는 것을 사용할 수 있습니다. urldecode() 및 rawurldecode()에 따라 rawurldecode()는 더하기 기호('+')를 공백으로 디코딩하지 않지만 urldecode()는 디코딩합니다.
2. urldecode() 및 rawurldecode()로 디코딩된 문자열은 UTF-8 형식으로 인코딩됩니다. URL에 UTF-8로 인코딩되지 않은 중국어가 포함되어 있으면 디코딩된 문자열을 변환해야 합니다.
다음과 같이 먼저 PHP 파일을 gb2312 인코딩으로 설정합니다. 일부는 왜곡되어 있고 일부는 정상임을 알 수 있습니다.
$url = '中国'; echo $a = urldecode(urlencode($url)) ,' '; echo iconv('gb2312', 'utf-8', $a);
관련 추천:
PHP 문자열 인코딩 변환 PHP 문자열 인코딩 문제 분석위 내용은 PHP 문자열 인코딩 문제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!