수색…


비고

  • UTF-8 문자열을 처리 할 때마다 안전하게 그렇게해야합니다. 불행히도 이것은 어려운 부분입니다. PHP의 mbstring 확장을 광범위하게 사용하고자 할 것입니다.

  • PHP의 내장 문자열 연산은 기본적으로 UTF-8이 아닙니다 . 일반적인 PHP 문자열 연산 (연결과 같은)으로 안전하게 할 수있는 것들이 있지만 대부분의 경우 동등한 mbstring 함수를 사용해야합니다.

입력

  • 저장하거나 모든 곳에서 사용하기 전에 수신 된 모든 문자열을 유효한 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.inidefault_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' .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow