utf-8 iso-8859-1 kodlama sorunu

4 Cevap php

Ï Önizleme başka bir web sitesinde bir rss feed Son mesajı çalışıyorum. Web sitesi, ISO-8859-1 kodlanmış iken yem, UTF-8 kodlanmış. Başlığı görüntülerken, ben kullanıyorum;

 $post_title = 'Blogging – does it pay the bills?';

 echo mb_convert_encoding($post_title, 'iso-8859-1','utf-8');

 // returns: Blogging ? does it pay the bills?
 // expected: Blogging - does it pay the bills?

Ben bekliyordum tire normal bir eksi işareti ama bazı koca uber çizgi olduğunu unutmayın. Evet, birkaç piksel uzun zaten. O karakteri üretemez benim klavye olarak nasıl tarif başka emin değil :) ...

4 Cevap

Ben bir Em Dash ortalama şüpheli (-). ISO-8859-1 Bu karakter içermez, bu nedenle bu kodlama dönüştürerek çok şans olacak değildir.

Sen htmlentities() kullanabilirsiniz, ama ben yayın için UTF-8 için ISO-8859-1 kapalı hareket öneririm.

mb_convert_encoding, sadece dahili kodlamayı dönüştürür - aslında başka ayarlanmış bir karakter karakterler için bayt dizileri değişmez. Bunun için ihtiyacınız iconv.

mb_internal_encoding( 'UTF-8' );
ini_set( 'default_charset', 'ISO-8859-1' );

$post_title = 'Blogging — does it pay the bills?'; // I used the actual m-dash here to best mimic your scenario

echo iconv( 'UTF-8', 'ISO-8859-1//TRANSLIT', $post_title );

Diğerleri söylediler Veya, sadece html kuruluşlara out-of-aralık karakterleri dönüştürmek.

Ben aşağıdaki varsayalım:

  • Sizin dosya aslında UTF-8 ile kodlanmış
  • Sizin editörü, Windows-1252 ile dosyayı yorumluyor

Bunun nedeni EM DASH karakter (U 2014) – ile temsil olmasıdır. Yani Windows-1252 (0xE2 = â, 0x80 = , 0x94 ile o karakterin (0xE28094) UTF-8 kod kelimesini yorumlamak ne zaman olsun tam olarak ne = ). Yani ilk editörü kodlama düzeltmek gerekir.

Ve çıktı ? için nedeni ISO 8859-1 EM DASH karakteri içermiyorsa olmasıdır.

Muhtemelen bir tire (U 2014), ve tire farklı bir karakter olduğu için ne yapmaya çalışıyoruz, kodlama dönüştürme değildir. Diğer bir deyişle, bu tür karakterler için arama ve el değiştirmek istiyor.

Daha iyisi, sadece UTF-8 web sitesine geçiş. Bu büyük ölçüde Latin-1 ile denk ve 2009 yılında bir web sitesi için daha uygundur.