>  기사  >  백엔드 개발  >  utf-8 - PHP의 문자 인코딩

utf-8 - PHP의 문자 인코딩

WBOY
WBOY원래의
2016-12-01 00:56:231194검색

<code>$str1 = "\xe4\xb8\xad";

$str2 = '\xe4\xb8\xad';

$str3 = '中';</code>

세 가지의 차이점과 서로 변형이 가능한지 자세히 설명해주실 수 있나요

답글 내용:

<code>$str1 = "\xe4\xb8\xad";

$str2 = '\xe4\xb8\xad';

$str3 = '中';</code>

세 가지의 차이점과 서로 변형이 가능한지 자세히 설명해주실 수 있나요

segmentfault에 대한 질문에 처음으로 답변했습니다. .

PHP 문자열 변수, 큰따옴표, 작은따옴표는 의미가 다릅니다

큰따옴표 사용 시 이스케이프 처리합니다. 작은따옴표 사용 시 이스케이프 처리하지 않습니다.
큰따옴표 사용 시 $xxxx 텍스트는 작은따옴표 사용 시 해당 변수의 값으로 대체됩니다.

예.

<code class="php">$abc='123';
echo "$abc"; //这样会输出123
echo '$abc'; //这样会输出$abc
echo "\n"; //这样会输出一个换行符
echo '\n'; //这样会输出\n两个字符(一个斜杠一个n)</code>

질문으로 돌아가서,
UTF-8에서 한자 "中"의 16진수 인코딩은 0xe4, 0xb8, 0xad입니다.
따라서 큰따옴표로 묶인 문자열에서는 "中"으로 이스케이프됩니다. " x 시작 부분은 HTML
의 &xe4;처럼 16진수로 표현된 문자임을 나타냅니다. 작은따옴표 문자열에서는 xe4xb8xad

가 직접 출력됩니다.

환경 인코딩이 UTF-8 미만인 경우 str1과 str3은 동일합니다. 직접 에코하면 "medium"이 바이너리 수준에서 3바이트 비교되는 경우에도 완전히 동일합니다. PHP의 문자열 로컬로 인코딩된 바이너리에 직접 저장됩니다

환경 인코딩이 UTF-8이 아닌 경우(예: GBK) str1은 기본적으로 잘못된 코드이며 str1과 str3은 더 이상 동일하지 않습니다.

str2의 경우 언제든지 'xe4xb8xad'를 출력합니다(따옴표 제외). 작은 따옴표로 묶인 문자열에서는 작은 따옴표만 '으로 이스케이프하면 됩니다. 그렇지 않으면 일반 문자로 처리됩니다.

첫 번째와 두 번째의 차이점, 즉 작은따옴표와 큰따옴표의 차이점만 설명하세요

큰따옴표: 안에 있는 따옴표는 이스케이프됩니다.
작은따옴표: 안에 있는 따옴표는 이스케이프되지 않습니다.

<code class="php">$a = 123;

echo "output:$a";//output:123
echo 'output:$a';//output:$a

//下面的示例仅限linux的php-cli
echo "new line\nsecond line";
/*
会换行,输出:
new line
second line
*/

echo 'no new line\n aaa';
/*
不会换行,输出:
no new line\n aaa
*/</code>

x 뒤에 16진수 숫자가 오는 것은 이스케이프 문자이며, 이스케이프 문자는 큰따옴표 " 안에서만 작동합니다. 작은따옴표에서는 작은따옴표 자체 '와 백슬래시 의 이스케이프만 유효하고 나머지는 유효하지 않습니다.

PHP 자체는 문자 인코딩을 구분하지 않습니다. 즉, $str1은 3바이트 문자열이고, 해당 문자열의 3바이트는 (16진수 인코딩) E4 B8 AD입니다. UTF-8 인코딩인 경우 문자입니다. 다른 인코딩에서는 반드시 그런 것은 아닙니다.

$str2은 12바이트 문자열로, 입력한 문자입니다.

, $str3은 문자열입니다. UTF-8 인코딩으로 파일을 저장하면 $str1과 같습니다. GBK로 저장하면 2바이트 D6 D0이고, BIG5로 저장하면 A4 A4입니다.


UTF-8, GBK, BIG5 또는 기타 여러 언어 인코딩이든 모두 EUC를 따릅니다. 즉, ASCII 문자의 경우 인코딩이 일관되므로 어떤 인코딩을 사용하여 저장하든 관계없이 인코딩이 동일합니다. PHP 코드 작업에 영향을 미치지 않습니다. 그러나 ASCII가 아닌 문자에는 큰 차이가 있습니다.

따라서 PHP에서 ASCII가 아닌 문자가 정상적으로 표시되도록 하려면 저장 인코딩과 출력 인코딩이 일치하는지 확인해야 합니다. 출력이 HTML인 경우 인코딩은 meta 태그 또는 HTTP 헤더를 통해 선언됩니다. 일관성이 없으면 잘못된 문자가 나타납니다.

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