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);
�й중국
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.