2010-07-01 8 views
1

내 스크립트가 확실히 UTF-8로 저장됩니다. "{$this->engine}:host={$this->host};dbname={$this->name};charset=UTF-8"으로 PDO를 인스턴스화합니다. 내 테이블은 InnoDB를 사용하며 utf8_general_ci를 사용하여 대조됩니다. 내 페이지는 Content-Type: text/html; charset=UTF-8 헤더 또는 <meta> 등가물로 전송됩니다.문자 인코딩 불일치

소스 코드에 HTTP 입력 또는 문자열 리터럴 중 하나에서 발생한 € 문자를 PDO를 사용하여 저장할 때 MySQL Workbench 5.2에 따라 c3 a2 e2 80 9a c2 ac이 남았습니다. 이것을 데이터베이스에서 가져 와서 페이지에 표시하면 문제가 없습니다. 그러나 phpMyAdmin과 Workbench에서 나는 €을 본다.

이러한 두 도구를 사용하여 €를 저장하는 경우, 나는 올바른 UTF-8 표현 인 e2 82 ac으로 남았습니다. 그러나 PHP로 검색하여 출력하려고하면 가 표시됩니다.

제 질문은이 불일치가 어디에서 발생하며 내 웹 페이지와 데이터베이스 도구를 모두 완벽하게 작동시킬 수 있습니까?

+1

이상하게 들리시 겠지만, 모든 일을 제대로하고있는 것 같습니다. DB 연결이 UTF-8인지 1000 % 확신합니까? 당신은'SET NAMES utf8;'쿼리를 보냄으로써 확실히 확인할 수 있습니까? –

+0

그리고 브라우저가 인코딩을 무시하고 있습니까? charset은 권고 사항이며, 브라우저가이를 구성하면 무시됩니다. 다른 브라우저에서 동작이 동일합니까? 다른 기계에서? – Andrew

+0

좋은 측정을 위해 PHP 스크립트가 UTF-8을 사용하도록 구성되었는지 확인하십시오. PHP가 파일이 다른 ISO 문자표를 사용해야한다고 생각하여 즉석 문자 변환을 수행하는 경우, 이는보고있는 내용을 설명 할 수 있습니다. 'ini_set ('default_charset', 'UTF-8');' – Andrew

답변

1

DSN의 charset 지시문은 실제로 MSSQL에 적용됩니다. 간단히 SET NAMES을 실행해야했습니다. 미안합니다.

0

단순히 html로 엔티티 & 유로에 € 변환;

나는 이렇게 것을 달성 connection charsets

도 : seeAlso - superfix에 대한 MySQL의 character_set_servercharacter_set_client 가장 일반적인 원인을 확인 (더 구체적으로와)

문제의 다른면됩니다 (하지만 다른 특수 문자의 문제가 발생할 수 있습니다) , meta equiv는 아무런 차이가 없다는 점에 유의해야합니다. 항상 헤더를 설정해야합니다 ('Content-Type : ...)

0

HTML 페이지가 정확하므로 저장하고있는 것으로 보입니다 데이터베이스의 올바른 데이터

€은 유로 기호의 UTF-8 인코딩을 windows-1252로 잘못 해석 한 것입니다. Windows 도구가 데이터베이스 인코딩 대신 "ANSI"인코딩을 사용하는 것 같습니다.