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


    서로 다른 문자 인 코딩 은 메모리 에서 사용 하 는 바이트 수가 다르다 는 것 을 모두 가 알 고 있다.ASCII 인 코딩 문자 가 1 개의 바이트 를 차지 하 는 경우 UTF-8 인 코딩 의 중국어 문 자 는 3 바이트 이 고 GBK 는 2 개의 바이트 입 니 다.
 
    PHP 도 몇 가지 문자열 을 가지 고 함 수 를 캡 처 합 니 다.그 중에서 자주 사용 되 는 것 은 substr 와 mb 입 니 다.substr。
    substr 를 사용 하여 중국어 문 자 를 캡 처 할 때 오류 가 발생 합 니 다.이것 은 substr 가 바이트 에 따라 캡 처 하기 때 문 입 니 다.즉,UTF-8 인 코딩 의 중국 어 는 substr 로 캡 처 하고 중국어 1/3 개 만 캡 처 할 수 있 으 니 당연히 난 장 판이 발생 합 니 다.
    mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )  인자$encoding 은 인 코딩 을 지정 할 수 있 습 니 다.생략 하면 내부 문자 인 코딩 을 사용 합 니 다.
  
     문자열 의 인 코딩 형식 을 잘 모 르 면 mbdetect_encoding 검사:
    $encoding  = mb_detect_encoding($string, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′)); 
     그리고:
     mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
    하면,만약,만약...substr,효율 이 좋 지 않 습 니 다.
인 코딩 관련 php 함수 사용
ord(substr($str, $i, 1)) > 0xa0)
ord($string)           ASC ,                       ,    gb2312        2  ,utf8     。       256     。
정규 문자:
일치 하 는 한자:  preg_match_all('/[\x80-\xff]?./', $string, $match);  
일치 하 는 영어:pregmatch_all("/[/x01-/x7f]+/", $string, $match);  
부호화 변환
iconv ( string  $in_charset  , string  $out_charset  , string  $str  )
 GB 2312 UTF-8 로 전환: iconv("GB2312","UTF-8",$text)
url 인 코딩 urlencode
인 코딩 후 되 돌아 오 는 문자열 중 -_. 이외 의 모든 비 자모 숫자 문 자 는 백분율(%)로 바 뀌 고 두 자리 16 진수 로 바 뀌 며 빈 칸 은 플러스(+)로 인 코딩 됩 니 다.이 인 코딩 은 WWW 폼 POST 데이터 의 인 코딩 방식 과 같 습 니 다. application/x-www-form-urlencoded 미디어 형식 인 코딩 방식 이 같 습 니 다.
그러나 주의해 야 할 것 은 인 코딩 할 때 일부 URL 에 만 인 코딩 해 야 한 다 는 것 이다.그렇지 않 으 면 URL 의 콜론 과 역 슬 래 쉬 도 전 의 될 수 있다.
URLEncode 의 방식 은 일반적으로 두 가지 가 있 는데 하 나 는 전통 적 인 GB 2312 기반 의 Encode 이 고 다른 하 나 는 UTF-8 기반 의 Encode 이다. 예:

$url = ' '; 
echo urlencode($url ); 
//UTF-8: %E4%B8%AD%E5%9B%BD 
//GB2312:%D6%D0%B9%FA 
예 를 들 어 우 리 는 브 라 우 저 를 사용 하여 바 이 두 를 열 고'중국'을 검색 합 니 다.   주소 표시 줄 에서 보기:
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
즉,우 리 는'중국'이 브 라 우 저 에 의 해 자동 으로 바 뀌 는 것 을 보 았 습 니 다.%E4%B8%AD%E5%9B%BD.
urlencode 와 rawurlencode 의 차이 점:urlencode 는 빈 칸 을 플러스 번호'+'로 인 코딩 하고 rawurlencode 는 빈 칸 을 플러스 번호'%20'으로 인 코딩 합 니 다. 
url 디 코딩 urldecode 와 rawurldecode
1.디 코딩 할 때 해당 되 는 urldecode()와 rawurldecode()를 사용 할 수 있 습 니 다.이에 따라 rawurldecode()는 플러스('+')를 빈 칸 으로 디 코딩 하지 않 고 urldecode()는 가능 합 니 다.
2.urldecode()와 rawurldecode()가 디 코딩 한 문자열 은 UTF-8 형식의 인 코딩 이 며,URL 에 UTF-8 인 코딩 이 아 닌 중국어 가 포함 되 어 있 으 면 디 코딩 된 문자열 을 변환 해 야 합 니 다.
다음 과 같이 phop 파일 을 gb 2312 인 코딩 으로 설정 합 니 다.일 부 는 난 장 판 이 고 일 부 는 정상 인 것 을 볼 수 있 을 것 이다.
$url='중국';echo $a = urldecode(urlencode($url)) ,' ';echo iconv('gb2312', 'utf-8', $a);
�й중국

좋은 웹페이지 즐겨찾기