항상 UTF-8을 사용하세요
P粉964682904
2023-08-27 16:00:18
<p>
새 서버를 설정 중이고 웹 애플리케이션에서 완전한 UTF-8 지원을 원합니다. 과거에 기존 서버에서 이 작업을 시도했지만 결국 항상 ISO-8859-1로 돌아가야 하는 것 같았습니다. </p>
<p>인코딩/문자 세트를 정확히 어디에서 설정해야 합니까? 이를 위해서는 Apache, MySQL 및 PHP를 구성해야 한다는 것을 알고 있습니다. 따라야 할 표준 체크리스트가 있습니까? 아니면 불일치가 발생한 부분을 해결할 수 있습니까? </p>
<p>이 내용은 MySQL 5, PHP, 5 및 Apache 2를 실행하는 새로운 Linux 서버에 적용됩니다. </p>
chazomaticus의 훌륭한 답변에 一个> 한 가지를 추가하고 싶습니다:
메타 태그도 잊지 마세요(예: HTML4 또는 XHTML 버전):
으아악사소해 보일 수도 있지만 이전에는 IE7에서 문제가 발생했습니다.
모든 작업을 올바르게 수행하고 있습니다. 데이터베이스, 데이터베이스 연결 및 Content-Type HTTP 헤더가 모두 UTF-8로 설정되어 있어 다른 모든 브라우저에서는 잘 작동하지만 Internet Explorer에서는 여전히 "서유럽" 인코딩을 사용해야 합니다.
페이지에 META 태그가 누락된 것으로 나타났습니다. 추가하면 문제가 해결됩니다.
편집자:
W3C에는 실제로 I18N 전용으로 꽤 큰 섹션이 있습니다. 이 문제와 관련된 많은 기사가 있습니다 - HTTP, (X)HTML 및 CSS의 측면을 설명합니다:
HTTP 헤더와 HTML 메타 태그(또는 XML로 작동하는 XHTML의 경우 XML 선언)를 모두 사용하는 것이 좋습니다.
데이터 저장:
utf8mb4
character set on all tables and text columns in your database. This makes MySQL physically store and retrieve values encoded natively in UTF-8. Note that MySQL will implicitly useutf8mb4
encoding if autf8mb4_*
데이터 정렬이 지정되도록 지정하세요(명시적인 문자 집합 없이).이전 버전의 MySQL(< 5.5.3)에서는 안타깝게도 유니코드 문자의 하위 집합만 지원하는
utf8
만 사용해야 합니다. 농담이겠죠.데이터 액세스:
애플리케이션 코드(예: PHP)에서 사용하는 DB 액세스 방법에 관계없이 연결 문자 집합을
utf8mb4
로 설정해야 합니다. 이렇게 하면 MySQL은 데이터를 전달할 때 기본 UTF-8에서 변환하지 않습니다. 귀하의 신청서와 그 반대의 경우도 마찬가지입니다.일부 드라이버는 자체 내부 상태를 업데이트하고 연결에 사용할 인코딩을 MySQL에 알리는 연결 문자 집합을 구성하기 위한 자체 메커니즘을 제공합니다. 이는 일반적으로 선호되는 접근 방식입니다. PHP에서:
PHP ≥ 5.3.6에서 PDO 추상화 계층을 사용하는 경우
를 지정할 수 있습니다. 으아악charset
DSN:에mysqli를 사용하는 경우
으로 전화할 수 있습니다. 으아악set_charset()
:일반 mysql을 사용하고 있지만 PHP ≥ 5.2.3을 실행 중인 경우
을 호출할 수 있습니다.mysql_set_charset
.드라이버가 연결 문자 집합 설정을 위한 자체 메커니즘을 제공하지 않는 경우 애플리케이션에서 연결 데이터가 인코딩될 것으로 예상하는 방식을 MySQL에 알리는 쿼리를 실행해야 할 수도 있습니다.
SET NAMES 'utf8mb4'
.utf8mb4
/utf8
/출력
: 🎜Content-Type: text/html; charset=utf-8
. You can achieve that either by settingdefault_charset
in php.ini (preferred), or manually usingheader()
함수와 같은 HTTP 헤더에 설정되어야 합니다.json_encode()
, addJSON_UNESCAPED_UNICODE
를 사용하여 출력을 인코딩하는 경우들어가세요 :
mb_check_encoding()
을 사용하여 저장하거나 사용하기 전에 수신된 모든 문자열이 유효한 UTF-8인지 확인할 수 있습니다. 하지만 이를 종교적으로 사용해야 합니다. 악의적인 클라이언트가 원하는 인코딩으로 데이터를 제출할 수 있기 때문에 이를 해결할 수 있는 방법이 없습니다. 그리고 저는 PHP가 이를 안정적으로 수행하도록 하는 트릭을 찾지 못했습니다.기타 코드 노트:
제공하는 모든 파일(PHP, HTML, JavaScript 등)은 유효한 UTF-8을 사용하여 인코딩되어야 합니다.
UTF-8 문자열을 처리할 때마다 안전하게 처리해야 합니다. 안타깝게도 이는 PHP의
mbstring
확장 기능을 광범위하게 사용하고 싶을 것입니다.PHP에 내장된 문자열 연산은 기본적으로 UTF-8 안전이 아닙니다. 일반 PHP 문자열 연산(예: 연결)으로 안전하게 수행할 수 있는 작업이 있지만 대부분의 경우 이에 상응하는
mbstring
함수를 사용해야 합니다. .무엇을 하고 있는지(읽기: 망치지 말고) 알려면 UTF-8과 UTF-8이 가능한 가장 낮은 수준에서 어떻게 작동하는지 이해해야 합니다. 알아야 할 모든 것에 대한 훌륭한 리소스를 보려면 utf8.com의 링크를 확인하세요. p>