SORU
26 Mayıs 2009, Salı


Kodlama algılamak ve her şeyi UTF-8 yapmak

Çeşitli RSS metinleri çok okumak ve benim veritabanı içine yerleştiriyorum.

Tabii ki, birkaç farklı karakter kodlamaları beslemeleri kullanılan, örneğin, UTF-8 ve ISO-8859-1 var.

Ne yazık ki, bazen metin kodlama ile ilgili sorunlar var. Örnek:

1) "" "" Benim veritabanında bu gibi görünmelidir:"". Ÿ Futbol ß Eğer bir "" doğru. görüntülenir Ÿ ise

2) Bazen, "" "" benim veritabanında bu gibi görünüyor:"". ß Futbol ß Yanlış, tabii ki gelir o zaman.

3) diğer durumlarda "" "" - herhangi bir değişiklik olmadan ß olarak kaydedilir. Ayrıca yanlış görüntülenir.

Ben bu durumda 2 ve 3 önlemek için ne yapabilirim?

Nasıl her şeyi aynı kodlama, tercihen olun UTF-8 olabilir miyim? Utf8_decode kullanmam lazım olduğunda kullanmak gerekir ben utf8_encode (), () (etkisi ne zaman fonksiyonları kullanmam lazım? belli olmaya başladı) ve ne zaman girdi ile bir şey yapmam gerekiyor mu?

Bana yardım EDEBİLİR MİSİN ve her şeyi aynı kodlamayı nasıl söyle bana? Belki de işlevi mb-tespit-kodlama ile()? Bunun için bir fonksiyon yazabilirim? Benim sorunum şu: Kodlama ne olduğunu bulmak için Nasıl 1) metin kullanır Nasıl 2) eski kodlama her ne ise-8 - UTF dönüştür

DÜZENLEME: Bu gibi bir işlevi de işe yarar mı?

function correct_encoding($text) {
    $current_encoding = mb_detect_encoding($text, 'auto');
    $text = iconv($current_encoding, 'UTF-8', $text);
    return $text;
}

Denedim ama işe yaramıyor. Bunun nesi yanlış?

CEVAP
13 AĞUSTOS 2010, Cuma


Eğer utf8_encode uygularsanız() zaten UTF8 dize bozuk UTF8 bir çıkış dönecektir.

Tüm bu sorunları ele alan bir fonksiyon yaptım. ::ToUTF8 diye Kodlama().

Dont dizeleri kodlama ne olduğunu bilmek gerekir. Latin1 (ıso 8859-1), Windows-1252 veya UTF8 veya dize onları karışımı olabilir. ::ToUTF8 kodlama UTF8. her şeyi dönüştürür

Bir servis bana, UTF8 ve Latin1 karıştırma aynı dize içinde çok karışık bir veri yem veriyordu, çünkü ben yaptım.

Kullanımı:

require_once('Encoding.php'); 
use \ForceUTF8\Encoding;  // It's namespaced now.

$utf8_string = Encoding::toUTF8($utf8_or_latin1_or_mixed_string);

$latin1_string = Encoding::toLatin1($utf8_or_latin1_or_mixed_string);

Download:

https://github.com/neitanod/forceutf8

Güncelleme:

Bozuk görünen her UTF8 dize düzelten. başka bir işlevi, Kodlama ekledim::fixUFT8(),

Kullanımı:

require_once('Encoding.php'); 
use \ForceUTF8\Encoding;  // It's namespaced now.

$utf8_string = Encoding::fixUTF8($garbled_utf8_string);

Örnekler:

echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");

çıkış:

Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football

Güncelleme: bir sınıf Kodlama denilen statik fonksiyonları bir ailenin işlevi (forceUTF8) dönüştürdüm. Yeni fonksiyon Kodlama::toUTF8().

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Breno Rises

    Breno Rises

    7 Ocak 2014
  • KRQE

    KRQE

    6 AĞUSTOS 2007
  • newreleaseblitz

    newreleasebl

    13 Ocak 2010