Yanlış dize kodlamaları

0 Cevap php

Not: Ben İlgili PHP tüm UTF-8, genellikle önerilen karakter kodlama makaleler okudum, ama benim soru gibi teknikler uygulanmış önce eklenen veriler ile ilgilidir. Ben geriye dönük tüm karakter kodlama sorunları gidermek isteyen duyuyorum.

Şimdi tüm bağlantıları PDO kullanarak utf8 olarak ayarlanır.

PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'

Ne yazık ki, veri büyük miktarda ben doğru karakter kodlama uygulamaları hayata geçirdiklerini önce şüpheli kodlama olduğu yerleştirildi. : Görüntülendiği gibi

$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/>';
}

Üretir:

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
----------

Çıkarmadan PDO ile 'SET İSİMLERİ utf8' zaman farklı çizgiler de olsa, aslında doğru öğeleri var verileri üretir:

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

----------

Ve burada söz konusu veritabanı satır dökümü:

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');

3. sıra "Tiesto" ve 3. ve 6. satırlar sonra doğru yankılanıyor. Ben kötü dizeleri ve doğru, vb kodlamaları tespit / kodlamaları düzeltmek için en iyi yolu nedir sadece emin değilim

0 Cevap