2013-07-12 5 views
-3

내 페이지 인코딩을 utf8으로 설정하고 메타 태그에 utf8으로 설정했습니다.PDO 및 특수 문자

그러나 데이터베이스에서 가치를 얻는 대신 물음표가있는 다이아몬드를 넣고 있습니다. 메신저는 문자를 알지 못한다고 가정합니다.

문자는 é입니다. 내가 에코를한다면 é; 페이지에 정상적으로 표시됩니다. 또한 내가 수동으로 html로 작성하는 경우. 그러나 PDO를 사용하여 데이터베이스 호출에서 동일한 값을 얻을 때

나는 PDO 설정을 가정합니다. 나는 시도했다 :

$db->exec("SET NAMES 'utf8';"); 

그러나 이것은 그것을 해결하지 못한다.

제안 사항?

+2

테이블 자체의 charset은 무엇입니까? 전체 렌더링 파이프 라인은 동일한 문자 집합이거나 최소한 적절한 변환 논리로 연결되어야합니다. 예 : 브라우저 -> 서버 -> PHP -> 데이터베이스 -> 테이블 -> 데이터베이스 -> PHP -> 서버 -> 브라우저 –

+0

"심지어 메타 태그"는 브라우저보다 아무것도 의미하지 않습니다. –

+0

PHP 5.3.6 이상인 경우, '; charset = utf8'와 같이 dsn 문자열 (PDO 생성자의 첫 번째 인수)에 문자 집합을 설정해야합니다. – jeroen

답변

2

많은 것들이 잘못 될 수 있습니다. 대개 utf-8을 사용하여 소스 파일을 인코딩하고 utf-8을 사용하여 데이터베이스 연결을 열고 utf-8로 데이터베이스 테이블을 정의해야합니다.

@deceze의 훌륭한 기사는 내가 물건을 명확하게하는 데 도움이되었습니다. http://kunststube.net/frontback/입니다. 당신이 경우에 시도 할 수

가장 눈에 띄는 사항은 다음과 같습니다 UTF8 인코딩을 사용하면 소스 파일 저장

  1. . 이 옵션은 Notepad ++ 또는 Crimpson Editor와 같은 편집기에 있습니다.
  2. UTF8 옵션으로 PDO 연결 작성 :

    $connection = new PDO('mysql:host='.$this->host.';dbname='.$this->db_name.';charset=utf8', $this->user, $this->pass,array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

  3. 이 테이블은 UTF8 인코딩되어 있는지 확인을하고 양식은 옵션이 있습니다 = "action.php

    < 형태의 동작을 "accept-charset ="utf-8 ">

업데이트 : 아마도 utf8_encode가 문제를 해결했지만 잘못된 변환이 있습니다. PHP에서 데이터베이스로 되돌아 간다. 또는 잘못된 파일 인코딩. 문제의 근원을 수정해야하며 utf8_encode는 더 이상 필요하지 않습니다.