Özel karakterler ile XML Ayrıştırma (UTF-8)

3 Cevap php

Ben bu (basitleştirilmiş) gibi görünüyor bazı XML ile başlıyorum:

<?xml version="1.0" encoding="UTF-8"?>
<alldata>
   <data name="Forsetì" />
</alldata>
</xml>

I simplexml_load_string özel karakter (i) ile ayrıştırılır ettik ama sonra olur: Açıkçası oldukça karıştırılmış olduğunu ì hangi.

Bunu önlemek için bir yolu var mı?

Ben. Txt olarak kaydedilir ve karakterler ince tarayıcıda görüntülendiğinde, XML, ince bir gerçeği biliyorum. Ben XML simplexml_load_string kullanın ve sonra, bir metin dosyası olarak, ya da veritabanı ile karıştırılmış değerleri kaydetmek zaman.

3 Cevap

Bu SimpleXML sonra (latin-1) veya CP-1252 gibi yakın bir şey, ISO-8859-1 kılınmış bir UTF-8 dizesi, yaratıyor görünüyor.

Eğer bir dosyaya kaydedebilirsiniz ve bir web sunucusu üzerinden bu dosyayı hizmet zaman, tarayıcı dosyasında bildirilen kodlamasını kullanır.

Including in a web page
Since your web page encoding is not UTF-8, you need to convert the string to whatever encoding you are using, eg ISO-8859-1 (latin-1).

Bu kolay iconv ile yapılır ():

    $xmlout = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $xmlout);

Saving to database
You database column is not using UTF-8 collation, so you should use iconv to convert the string to the charset that your database uses.

Veritabanı harmanlama render kodlama olarak aynı olduğunu varsayarsak, sen veritabanından okurken bir şey yapmak zorunda kalmazsınız.

Explanation
In UTF-8, a 0xc2 prefix byte is used to access the top half of the "Latin-1 Supplement" block which includes characters such as accented letters, currency symbols, fractions, superscript 2 and 3, the copyright and registered trademark symbols, and the non-breaking space.

Bununla birlikte ISO-8859-1 in, bir bayt 0xC2 Â temsil eder. Lütfen UTF-8 dizesi olan biri olarak yorumlanmaktadır Yani, o zaman bir başka saçmalık karakter tarafından takip olsun.

Bu XML ince olması çok büyük olasılıkla, ama saklanan veya çıkış sırasında karakter karıştırılmış olur.

Bir HTML sayfasında, veri çıkışı iseniz: o da UTF-8 olarak kodlanmış emin olun. HTML sayfa ISO-8859-1 ise, utf8_decode hızlı bir düzeltme olarak kullanabilirsiniz; UTF-8 kullanarak uzun vadede daha iyi bir seçenektir.

Bağlantının kodlama olarak, tablo ve sütun (s) Eğer veri eklemek: Bir mySQL veri depolama ediyorsanız, UTF8 tüm yol boyunca kodlama olarak seçilmiş olması gerekir.

Bu kişilere gelince XML sıkı, ister & amp olmalı Ve ben ì gerekir

Yani bir çeviri tablosunu gerekir.

function xml_entity_decode($_string) {
    // Set up XML translation table
    $_xml=array();
    $_xl8=get_html_translation_table(HTML_ENTITIES,ENT_COMPAT);
    while (list($_key,)=each($_xl8))
        $_xml['&#'.ord($_key).';']=$_key;
    return strtr($_string,$_xml);
}