문제

종종 등장 인물이 발생합니다 é 변형됩니다 é, MySQL DB의 콜레이션이 있지만 테이블 및 필드는 UTF8_General_CI로 설정됩니다. 인코딩 컨텐츠 타입 페이지가 UTF8로 설정되어 있습니다.

UTF8_encode/Decode에 대해 알고 있지만 어디서 어떻게 사용하는지 확실하지 않습니다.

나는 "모든 소프트웨어 개발자가 절대적으로 절대적으로 최소한, 유니 코드 및 문자 세트에 대해 긍정적으로 알아야합니다 (변명 없음!)"기사이지만 MySQL / PHP 특정 포인터가 필요합니다.

질문 : 국제 문자가 포함 된 사용자가 입력 한 데이터가 손상되지 않도록하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

첫 번째 보면 http://www.nicknettleton.com/zine/php/php-utf-8-cheatsheet 중요한 것은 누락되었다고 생각합니다 (아마도 이것을 간과했을 것입니다). MySQL 설치 및/또는 구성에 따라 MySQL이 클라이언트 측에서 기대하는 인코딩을 알 수 있도록 연결 인코딩을 설정해야합니다 (MySQL 연결의 클라이언트 측, 이는 PHP 스크립트가되어야합니다). 수동으로 발행하여이를 수행 할 수 있습니다

SET NAMES utf8

쿼리 다른 쿼리 전에 MySQL 서버로 보내기 전에.

PHP 측에서 PDO를 사용하는 경우 연결을 설정하여 모든 (Re) 에서이 쿼리를 자동으로 발행하여 사용하여 연결을 설정할 수 있습니다.

$db=new PDO($dsn, $user, $pass);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");

DB 연결을 초기화 할 때.

다른 팁

Collation과 Charset도 같은 것이 아닙니다. Collation은 charset과 일치해야하므로 Charset이 UTF-8 인 경우 Collation도 마찬가지입니다. 잘못된 Collation을 선택하면 데이터가 차단되지 않습니다. String Comparison/Sinding Work를 잘못 만들 수 있습니다.

즉, PHP에서 숯불 설정을 설정할 수있는 여러 장소가 있습니다. 가능하면 전체적으로 UTF-8을 사용하는 것이 좋습니다. 지정된 숯불이 필요한 장소는 다음과 같습니다.

  • 데이터베이스. 데이터베이스, 테이블 및 필드 레벨 및 심지어 쿼리 수준에서도 설정할 수 있습니다.
  • PHP와 데이터베이스 간의 연결.
  • HTTP 출력; HTTP 헤더가 있는지 확인하십시오 Content-Type UTF-8을 지정합니다. PHP 및 Apache에서 기본값을 설정하거나 PHP를 사용할 수 있습니다. header 기능.
  • HTTP 입력. 일반적으로 양식은 페이지가 제공되는 것과 동일한 숯으로 제출되지만 확인하려면 accept-charset 재산. 또한 URL이 UTF-8 인코딩되어 있는지 확인하거나 URL에서 비 ASCII 문자를 사용하지 않도록하십시오 (및 Get 매개 변수).

utf8_encode/decode 함수는 조금 이상하게 명명되었습니다. 이들은 특히 LATIN1 (ISO-8859-1)과 UTF-8 사이를 전환시킨다. 응용 프로그램의 모든 것이 UTF-8 인 경우 많이 사용할 필요가 없습니다.

UTF-8 및 PHP와 관련하여 적어도 두 개의 gotchas가 있습니다. 첫 번째는 PHP의 내장 문자열 함수가 문자열이 단일 바이트가 될 것으로 예상한다는 것입니다. 많은 운영의 경우, 이것은 중요하지 않지만 그것은 당신이 의존 할 수없는 것보다 의미합니다. strlen 그리고 다른 기능. 한계에 대한 좋은 점수가 있습니다 이 페이지. 일반적으로 큰 문제는 아니지만 특히 3 자 라이브러리를 사용할 때는 문제가 발생할 수 있음을 알고 있어야합니다. 한 가지 옵션은 MB_String 확장자를 사용하는 것인데, 여기에는 모든 귀찮은 기능을 UTF-8 인식 대안으로 대체 할 수있는 옵션이 있습니다. 여전히 100% 방탄 솔루션은 아니지만 대부분의 경우 작동합니다.

또 다른 문제는 PHP의 일부 설치가 여전히 magic_quotes 설정이 켜졌습니다. 이 문제는 UTF-8과 직교적이지만 머리 긁힘으로 이어질 수 있습니다. 자신의 정신을 위해서 끄십시오.

이 기사에서 다루지 않는 말은별로 없습니다.

http://developer.loftdigital.com/blog/php-utf-8-cheatsheet

해야 할 일 :

  • Apache가 UTF-8 컨텐츠를 제출하는지 확인하십시오. httpd.conf에서이를 수행하거나 PHP를 사용하십시오. header()-수동으로 수행하는 기능.
  • 데이터베이스 연결이 UTF8인지 확인하십시오. SET NAMES utf8 트릭을 수행합니다.
  • 모든 테이블이 UTF8로 설정되어 있는지 확인하십시오.
  • 국제 문자를 저장하면 모든 PHP 및 템플릿 파일이 UTF8로 인코딩되어 있는지 확인하십시오.

당신은 보통 사용하기 위해 많은 일을 할 필요가 없습니다. mb_string 또는 utf8_encode/decode-이 작업을 수행 할 때 장애.

더 나은 유니 코드 정확성을 위해서는 UTF8_UNICODE_CI를 사용해야합니다 (문서는 차이점에 대해 약간 모호합니다). 또한 다음 MySQL 플래그가 올바르게 설정되어 있는지 확인해야합니다.

  • 기본 문자 세트 = UTF8
  • Skip-Character-Set-Client Handshake // 클라이언트가 다른 인코딩을 시행하지 않도록 중요합니다.

이들은 MySQL 구성 파일 ([MySQLD] 탭 아래) 또는 적절한 쿼리를 보내서 실행 시간에 설정할 수 있습니다.

작성된 언어에 관계없이, 다양한 인코딩을 허용하는 앱을 만들려면 조각으로 처리하십시오.

  • 인코딩을 식별하십시오
    • 어쨌든 당신은 어떤 종류의 인코딩을 다루고 있는지 알고 싶습니다. 그렇지 않으면 더 고려하는 것은 무의미합니다. 당신은 정크 숯으로 끝날 것입니다.
  • 바이트를 처리하십시오
    • 이 문자열은 문자의 '문자열'처럼 덜 생각하고 바이트 목록과 비슷합니다.
    • PHP는 특히 교활합니다. 데이터를 날아 다니지 않도록하십시오. UTF-8 문자열을 재 획득하는 경우이를 식별하십시오.
  • LCD를 위해 보관하십시오
    • 다시, 당신은 데이터를 자르고 싶지 않습니다. 문장을 영어로 저장하고 있다면 만다린 글리프 세트도 저장할 수 있습니까? 아랍어는 어떻습니까? 이 중 가장 많은 공간이 필요한 것은 무엇입니까? 그것을 설명합니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top