참고 : 일반적으로 제안되는 관련 PHP, UTF-8 문자 인코딩 기사를 모두 읽었지만 제 질문은 그러한 기술을 적용하기 전에 삽입 된 데이터와 관련이 있습니다. 모든 문자 인코딩 문제를 소급 수정하고 싶습니다.잘못된 문자열 인코딩
이제 모든 연결은 PDO를 사용하여 utf8로 설정됩니다.
불행히도 올바른 문자 인코딩 방식을 구현하기 전에 불행히도 상당한 양의 데이터가 삽입되어 의심 스럽습니다. 에 의해 표시되는 :
$sql = "SELECT name FROM data LIMIT 3";
foreach ($pdo->query($sql) as $row)
{
$name = $row['name'];
echo $name . "\n";
echo utf8_encode($name) . "\n";
echo utf8_decode($name) . "\n";
echo htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . "\n";
echo htmlspecialchars(utf8_encode($name), ENT_QUOTES, 'UTF-8') . "\n";
echo htmlspecialchars(utf8_decode($name), ENT_QUOTES, 'UTF-8') . "\n";
echo '<hr/>';
}
생산 어떤 :
AntonÃÂn Dvořák
AntonÃÆÃÂn DvoÃâ¦Ãâ¢ÃÆák
Anton�?n Dvo�?�?�?¡k
AntonÃÂn Dvořák
AntonÃÆÃÂn DvoÃâ¦Ãâ¢ÃÆák
----------
Ô±Ö€Õ¡Õ´ Ô½Õ¡Õ¹Õ¡Õ¿Ö€ÕµÕ¡Õ¶
ñÃâ¬Ã¡Ã´ ýáùáÿÃâ¬ÃµÃ¡Ã¶
Ա�?ամ Խաչատ�?յան
Ô±Ö€Õ¡Õ´ Ô½Õ¡Õ¹Õ¡Õ¿Ö€ÕµÕ¡Õ¶
ñÃâ¬Ã¡Ã´ ýáùáÿÃâ¬ÃµÃ¡Ã¶
----------
Tiësto
Tiësto
Tiësto
Tiësto
Tiësto
Tiësto
----------
서로 다른 라인에 불구하고, 올바른 항목이 실제로 않는 데이터를 생성하는 PDO와 'SET의 이름을 utf8'을 제거 :
를DROP TABLE IF EXISTS `data`;
CREATE TABLE IF NOT EXISTS `data` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(80) NOT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`(10)),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;
INSERT INTO `data` (`id`, `name`) VALUES (0, 'AntonÃÂn Dvořák'), (1, 'Ô±Ö€Õ¡Õ´ Ô½Õ¡Õ¹Õ¡Õ¿Ö€ÕµÕ¡Õ¶'), (2, 'Tiësto');
,536 :
AntonÃn DvoÅák
AntonÃÂn DvoÃÂák
Antonín Dvořák
AntonÃn DvoÅák
AntonÃÂn DvoÃÂák
Antonín Dvořák
----------
Արամ Խաչատրյան
Ô±ÖÕ¡Õ´ Ô½Õ¡Õ¹Õ¡Õ¿ÖÕµÕ¡Õ¶
???? ?????????
Արամ Խաչատրյան
Ô±ÖÕ¡Õ´ Ô½Õ¡Õ¹Õ¡Õ¿ÖÕµÕ¡Õ¶
???? ?????????
----------
Tiësto
Tiësto
Ti�sto
Tiësto
Tiësto
----------
그리고 여기가 해당 데이터베이스 행의 덤프입니다
세 번째 줄 "Tiësto"의 3 번째 줄과 6 번째 줄이 올바르게 에코됩니다. 나는이에게 자신을 시도하지 않은 - - 나는 이 작업을해야
이 질문을 받았지만 IMO는 여기에 완전히 대답하지 않았습니다 : http://stackoverflow.com/questions/1344692/i-need-help-fixing-broken-utf8-encoding (* * fixable이기 때문에 중복으로 투표하지 않음) –
첫 번째 단계로 확인하십시오 : 데이터베이스 데이터가 100 % 확실한가요? 덤프를하기 위해 당신은 무엇을 사용 했습니까?phpMyAdmin 또는 HeidiSQL과 같은 클라이언트 프로그램이 테이블을 탐색 할 때 깨진 문자를 표시합니까? –
phpMyAdmin은 맨 위 줄에 표시된 내용을 표시합니다. – James