PHP에서 문자열은 다른 문자 인코딩 형식 일 수 있습니다. 가장 흔한 두 가지는 ISO-8859-1 (LATIN1이라고도 함)과 UTF-8입니다. ISO-8859-1은 주로 서유럽 언어로 사용되는 단일 바이트 인코딩이며 UTF-8은 거의 모든 문자를 나타내는 다중 바이트 인코딩입니다.
외부 데이터 소스 (예 : 데이터베이스, API 또는 파일)의 데이터를 읽으면 이러한 데이터의 인코딩 형식이 프로그램에서 내부적으로 사용하는 인코딩 형식과 일치하지 않을 수 있습니다. 현재 정상적인 디스플레이 및 처리를 보장하기 위해 인코딩을 변환해야합니다.
UTF8_encode () 함수는 ISO-8859-1 인코딩 된 문자열을 인코딩 된 UTF-8으로 변환합니다. 데이터 소스가 ISO-8859-1 인코딩을 사용하고 PHP가 내부적으로 처리 한 문자열이 UTF-8 인코딩 인 경우이 기능을 통해이를 변환해야합니다.
<span><span><span class="hljs-variable">$isoString</span></span><span> = </span><span><span class="hljs-string">"Café"</span></span><span>; </span><span><span class="hljs-comment">// 이 문자열이 있다고 가정합니다 ISO-8859-1 코딩</span></span><span>
</span><span><span class="hljs-variable">$utf8String</span></span><span> = </span><span><span class="hljs-title function_ invoke__">utf8_encode</span></span><span>(</span><span><span class="hljs-variable">$isoString</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$utf8String</span></span><span>; </span><span><span class="hljs-comment">// 산출:Café</span></span><span>
</span></span>
utf8_encode ()가 필요한지 여부를 결정하려면 다음 조건을 확인해야합니다.
데이터 소스 인코딩 형식 : 데이터가 ISO-8859-1 인코딩 (또는 기타 비 UTF-8 인코딩) 인 경우 UTF-8에서 처리 또는 출력이 필요합니다. 변환하려면 UTF8_encode ()를 사용해야합니다.
현재 환경에 대한 기본 문자 세트 : 대부분의 최신 PHP 환경은 이미 기본 문자 세트로 UTF-8을 사용합니다. 애플리케이션 환경이 이미 UTF-8 인코딩 인 경우 외부에서 읽은 데이터는 실제 인코딩에 따라 변환해야합니다. 그렇지 않으면 차량 코드가 발생합니다.
브라우저 또는 터미널에서 표시되는 코딩 : 응용 프로그램이 브라우저에 데이터를 출력하면 브라우저가 일반적으로 UTF-8 인코딩을 사용해야합니다. 데이터 인코딩이 브라우저에서 예상 한 문자와 일치하지 않으면 표시 문제가 발생할 수 있습니다. 이 시점에서 utf8_encode ()를 사용하여 데이터를 올바른 문자 세트로 변환 할 수 있습니다.
데이터베이스에서 필드를 읽고 인코딩 형식이 ISO-8859-1 인 다음 웹 페이지 에이 필드를 표시해야한다고 가정합니다. 차량 코드를 피하려면 일반적으로 변환에 UTF8_ENCODE ()를 사용해야합니다.
<span><span><span class="hljs-comment">// 데이터베이스에서 읽으십시오 ISO-8859-1 코딩数据</span></span><span>
</span><span><span class="hljs-variable">$dbString</span></span><span> = </span><span><span class="hljs-string">"El Ni?o"</span></span><span>; </span><span><span class="hljs-comment">// 데이터베이스에서 읽은 문자열이 있다고 가정하십시오 ISO-8859-1 코딩</span></span><span>
</span><span><span class="hljs-comment">// 변환 UTF-8 코딩</span></span><span>
</span><span><span class="hljs-variable">$utf8String</span></span><span> = </span><span><span class="hljs-title function_ invoke__">utf8_encode</span></span><span>(</span><span><span class="hljs-variable">$dbString</span></span><span>);
</span><span><span class="hljs-comment">// 산출到浏览器</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$utf8String</span></span><span>; </span><span><span class="hljs-comment">// 산출:El Ni?o</span></span><span>
</span></span>
데이터가 이미 UTF-8 인코딩되어 있는지 확인하면 UTF8_Encode ()를 다시 호출 할 필요가 없습니다. 그렇지 않으면 불필요한 변환 문제가 발생할 수 있습니다.
어떤 경우에는 문자열의 인코딩 형식이 확실하지 않을 수 있습니다. 현재 MB_DETECT_ENCODING () 함수를 사용하여 문자열의 인코딩을 감지하고 변환이 필요한지 여부를 결정할 수 있습니다.
<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"El Ni?o"</span></span><span>; </span><span><span class="hljs-comment">// 假设这个字符串的코딩未知</span></span><span>
</span><span><span class="hljs-comment">// 检测字符串的코딩</span></span><span>
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_detect_encoding</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">"ISO-8859-1, UTF-8"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$encoding</span></span><span> == </span><span><span class="hljs-string">"ISO-8859-1"</span></span><span>) {
</span><span><span class="hljs-comment">// 의 경우 ISO-8859-1 코딩,则변환 UTF-8</span></span><span>
</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-title function_ invoke__">utf8_encode</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>);
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>; </span><span><span class="hljs-comment">// 산출转换后的字符串</span></span><span>
</span></span>
가능하면 응용 프로그램 개발 중에 UTF-8 인코딩을 사용하십시오. UTF-8은 전 세계의 거의 모든 언어 문자를 지원하여 일관되지 않은 인코딩의 번거 로움을 피합니다. MySQL 데이터베이스를 사용하는 경우 데이터베이스 및 테이블의 문자 세트를 UTF-8로 설정하는 것이 좋습니다.
<span><span><span class="hljs-keyword">CREATE</span></span><span> DATABASE my_database </span><span><span class="hljs-type">CHARACTER</span></span><span> </span><span><span class="hljs-keyword">SET</span></span><span> utf8mb4 </span><span><span class="hljs-keyword">COLLATE</span></span><span> utf8mb4_unicode_ci;
</span></span>
이런 식으로 후 처리 인코딩 변환의 번거 로움을 줄일 수 있습니다.