찾다

 >  Q&A  >  본문

항상 UTF-8 인코딩을 사용하세요

<p> 새 서버를 설정 중이고 웹 애플리케이션에서 완전한 UTF-8 지원을 원합니다. 이전에 기존 서버에서 이 작업을 시도했지만 항상 ISO-8859-1로 돌아가야 하는 것 같았습니다. <br />인코딩/문자 세트는 어디에서 설정해야 하나요? 이를 달성하려면 Apache, MySQL 및 PHP를 구성해야 한다는 것을 알고 있습니다. 불일치 문제를 참조하거나 해결할 수 있는 표준 체크리스트가 있습니까? <br />이것은 MySQL 5, PHP 5 및 Apache 2를 실행하는 새로운 Linux 서버입니다. <br /></p><p><br /></p>
P粉548512637P粉548512637496일 전492

모든 응답(2)나는 대답할 것이다

  • P粉138871485

    P粉1388714852023-07-25 16:40:26

    chazomaticus의 훌륭한 답변에 추가하고 싶습니다:

    또한 META 태그(예: HTML4 또는 XHTML 버전)도 잊지 마세요:

    으아악

    사소해 보일 수도 있지만 이전에는 IE7에서 문제가 발생했습니다.

    모든 작업을 올바르게 수행하고 있습니다. 데이터베이스, 데이터베이스 연결 및 Content-Type HTTP 헤더가 모두 UTF-8로 설정되어 있어 다른 모든 브라우저에서는 잘 작동하지만 Internet Explorer에서는 여전히 "서유럽" 인코딩을 사용해야 합니다. .

    페이지에 META 태그가 누락된 것으로 나타났습니다. 추가한 후 문제가 해결되었습니다.


    편집:

    W3C에는 실제로 국제화(I18N) 문제를 전담하는 상당한 규모의 섹션이 있습니다. HTTP, (X)HTML 및 CSS를 다루는 이 문제와 관련된 여러 기사가 있습니다.

    HTTP 헤더와 HTML의 메타 태그를 모두 사용하는 것이 좋습니다(또는 XML로 제공되는 XHTML의 XML 선언을 사용하는 것).

    회신하다
    0
  • P粉381463780

    P粉3814637802023-07-25 09:11:32

    데이터 저장:

    • 데이터베이스의 모든 테이블과 텍스트 열에 utf8mb4 문자 집합을 지정하세요. 이런 방식으로 MySQL은 UTF-8의 기본 인코딩으로 값을 물리적으로 저장하고 검색합니다. utf8mb4_* 데이터 정렬이 지정되면(명시적인 문자 집합 없이) MySQL은 암시적으로 utf8mb4 인코딩을 사용합니다.

    • 이전 버전의 MySQL(<5.5.3)에서는 유니코드 문자의 하위 집합만 지원하는 간단한 utf8을 사용해야 했는데, 그게 안타깝지만 사실입니다.

    데이터 액세스:

    • 애플리케이션 코드(예: PHP)에서 어떤 데이터베이스 액세스 방법을 사용하든 연결 문자 집합을 utf8mb4로 설정해야 합니다. 이런 방식으로 MySQL은 데이터를 애플리케이션에 전달할 때 기본 UTF-8에서 어떤 변환도 수행하지 않으며 그 반대의 경우도 마찬가지입니다.

    • 일부 드라이버는 자체 내부 상태를 업데이트하고 연결에 사용할 인코딩을 MySQL에 알리는 연결 문자 집합을 구성하기 위한 자체 메커니즘을 제공합니다. 이는 일반적으로 선호되는 접근 방식입니다. PHP에서:

      • PHP ≥ 5.3.6용 PDO 추상화 계층을 사용하는 경우 DSN에서 문자 집합을 지정할 수 있습니다.

        으아아아
      • mysqli를 사용하는 경우 set_charset()을 호출할 수 있습니다.

        으아아아
      • 일반 mysql 기능만 사용할 수 있지만 PHP ≥ 5.2.3을 실행하는 경우 mysql_set_charset 메서드를 호출할 수 있습니다.

    • 드라이버가 연결 문자 집합을 설정하는 자체 메커니즘을 제공하지 않는 경우 애플리케이션에서 연결 데이터를 인코딩하는 방법을 MySQL에 알리는 쿼리(SET NAMES 'utf8mb4')를 실행해야 할 수도 있습니다.

    • 위와 동일한 고려 사항이 utf8mb4/utf8에도 적용됩니다.

    출력:

    • UTF-8은 HTTP 헤더에 설정되어야 합니다(예: Content-Type: text/html;). php.ini(권장)에서 default_charset을 설정하거나 header() 함수를 수동으로 사용하여 이를 수행할 수 있습니다.
    • 응용 프로그램이 텍스트를 다른 시스템으로 전송하는 경우 문자 인코딩도 알려줘야 합니다. 웹 애플리케이션의 경우 데이터가 전송되는 인코딩(HTTP 응답 헤더 또는 HTML 메타데이터를 통해)을 브라우저에 알려야 합니다.
    • 출력 인코딩에 json_encode()를 사용할 때 두 번째 매개변수로 JSON_UNESCAPED_UNICODE를 추가하세요.

    입력:

    • 브라우저는 문서에 지정된 문자 집합으로 데이터를 제출하므로 입력 측에서 특별한 처리가 필요하지 않습니다.
    • 요청 인코딩(변조 가능성)이 의심되는 경우 수신된 각 문자열을 어디에나 저장하거나 사용하기 전에 유효한 UTF-8인지 확인할 수 있습니다. PHP의 mb_check_encoding()이 이를 수행할 수 있지만 항상 사용해야 합니다. 악의적인 클라이언트가 원하는 어떤 인코딩으로든 데이터를 제출할 수 있기 때문에 이 문제를 해결할 수 있는 방법이 없습니다. PHP에서 이 작업을 안정적으로 수행하도록 하는 방법을 찾지 못했습니다.

    기타 코드 노트:

    • 제공하는 모든 파일(PHP, HTML, JavaScript 등)은 유효한 UTF-8로 인코딩되어야 합니다.

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

    • PHP의 내장 문자열 연산은 기본적으로 UTF-8을 지원하지 않습니다. 안전하게 사용할 수 있는 일반적인 PHP 문자열 연산(예: 연결)이 있지만 대부분의 연산에는 동등한 mbstring 함수를 사용해야 합니다.

    • 무엇을 하고 있는지(즉, 망치지 않으려면) UTF-8과 UTF-8이 가장 낮은 수준에서 작동하는 방식을 이해해야 합니다. 알아야 할 모든 것을 배울 수 있는 훌륭한 리소스를 제공하는 utf8.com의 링크를 확인하세요.

    회신하다
    0
  • 취소회신하다