수색…
비고
입력
저장하거나 모든 곳에서 사용하기 전에 수신 된 모든 문자열을 유효한 UTF-8로 확인해야합니다. PHP의
mb_check_encoding()
은 트릭을 수행하지만 일관되게 사용해야합니다. 악의적 인 클라이언트가 원하는 인코딩으로 데이터를 제출할 수 있기 때문에이 문제를 해결할 방법은 없습니다.$string = $_REQUEST['user_comment']; if (!mb_check_encoding($string, 'UTF-8')) { // the string is not UTF-8, so re-encode it. $actualEncoding = mb_detect_encoding($string); $string = mb_convert_encoding($string, 'UTF-8', $actualEncoding); }
HTML5를 사용하는 경우이 마지막 지점을 무시할 수 있습니다. 브라우저가 보낸 모든 데이터가 UTF-8이되기를 원합니다. 이렇게하는 유일한 방법은
accept-charset
속성을 모든<form>
태그에 추가하는 것입니다.<form action="somepage.php" accept-charset="UTF-8">
산출
응용 프로그램이 다른 시스템에 텍스트를 전송하는 경우 문자 인코딩에 대해서도 알려야합니다. PHP에서는
php.ini
의default_charset
옵션을 사용하거나 직접Content-Type
MIME 헤더를 직접 발행 할 수 있습니다. 최신 브라우저를 타겟팅 할 때 선호되는 방법입니다.header('Content-Type: text/html; charset=utf-8');
응답 헤더를 설정할 수없는 경우 HTML 메타 데이터 를 사용하여 HTML 문서의 인코딩을 설정할 수도 있습니다.
HTML5
<meta charset="utf-8">
이전 버전의 HTML
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
데이터 저장 및 액세스
이 주제에서는 특히 UTF-8 및 데이터베이스와 함게 사용하기위한 고려 사항에 대해 설명합니다. PHP에서 데이터베이스를 사용하는 것에 대한 더 많은 정보를 원한다면 이 항목 을 체크 아웃 하십시오 .
MySQL 데이터베이스에 데이터 저장하기 :
- 데이터베이스의 모든 테이블 및 텍스트 열에
utf8mb4
문자 세트를 지정하십시오. 이것은 MySQL이 기본적으로 UTF-8로 인코딩 된 값을 물리적으로 저장하고 검색하도록합니다.utf8mb4_*
데이터 정렬이 지정되어 있으면 (명시 적 문자 세트없이) MySQL은 암시 적으로utf8mb4
인코딩을 사용합니다. - 이전 버전의 MySQL (<5.5.3)은
utf8mb4
지원하지 않으므로 유니 코드 문자의 하위 집합 만 지원하는utf8
을 사용해야합니다.
MySQL 데이터베이스에서 데이터 액세스하기 :
응용 프로그램 코드 (예 : PHP)에서 사용하는 DB 액세스 방법에 관계없이 연결 문자 집합을
utf8mb4
로 설정해야합니다. 이렇게하면 MySQL은 네이티브 UTF-8에서 데이터를 애플리케이션으로 넘겨 주거나 그 반대로 변환하지 않습니다.일부 드라이버는 자체 내부 상태를 업데이트하고 연결에 사용되는 인코딩을 MySQL에 알려주는 연결 문자 집합을 구성하기위한 자체 메커니즘을 제공합니다. 이것은 일반적으로 선호되는 방법입니다.
예 (
utf8mb4
/utf8
에 관한 동일한 고려 사항은utf8mb4
동일하게 적용됩니다) :PHP 5.3.6 이상의 PDO 추상화 계층을 사용하는 경우 DSN 에서
charset
을 지정할 수 있습니다.$handle = new PDO('mysql:charset=utf8mb4');
mysqli를 사용하고 있다면
set_charset()
호출 할 수 있다 :$conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db'); $conn->set_charset('utf8mb4'); // object oriented style mysqli_set_charset($conn, 'utf8mb4'); // procedural style
일반 mysql을 사용 하지만 PHP 5.2.3 이상을 실행하는 경우
mysql_set_charset
을 호출 할 수 있습니다.$conn = mysql_connect('localhost', 'my_user', 'my_password'); $conn->set_charset('utf8mb4'); // object oriented style mysql_set_charset($conn, 'utf8mb4'); // procedural style
데이터베이스 드라이버가 연결 문자 세트를 설정하는 자체 메카니즘을 제공하지 않는다면, 당신의 애플리케이션이 인코딩 된 연결의 데이터를 기대하는 방법을 MySQL에 알려주는 질의를해야 할 수도 있습니다 :
SET NAMES 'utf8mb4'
.