>  기사  >  백엔드 개발  >  PHP 문자열 인코딩 문제에 대한 자세한 설명

PHP 문자열 인코딩 문제에 대한 자세한 설명

小云云
小云云원래의
2018-03-22 15:42:391834검색

다른 문자 인코딩은 메모리에서 다른 바이트 수를 차지한다는 것을 누구나 알고 있습니다. 예를 들어, 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 튜토리얼

위 내용은 PHP 문자열 인코딩 문제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.