MySQL veritabanı (örneğin kıvırcık kesme işareti) Özel karakterler benim XML bozma edilir

1 Cevap php

Ben gazete makaleleri bir MySQL veritabanı var. Hacım tablosu, bir sorun masa ve bir makale tablo var. Ben daha sonra çekti ve bir iPhone uygulaması tarafından okunan bir özellik listesi üreten bir PHP dosyası var. Plist her birimin içinde bir sözlük olarak her bir sorunun içinde bir sözlük olarak her yazı ve her sorunu tutar. Sadece bir başlık ve URL - Plist aslında bütün makale tutmaz.

Bazı makale başlıkları kıvırcık kesme gibi özel karakterler. Üretilen XML Plist, özel bir karakter vurur zaman baktığımızda, bu beklenmeyen karıştırılmış ve okunamaz XML bırakarak, metnin bir sürü ufalanır.

(... Chrome, zaten, ve ben iPhone tahmin ediyorum. Firefox aslında herhangi bir özel karakter yeri ve bir şey gobbling değil siyah bir elmas? Beyaz gösteren, oldukça iyi işler.)

Example well-formed plist snippet:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Rows</key> 
    <array>     
        <dict> 
            <key>Title</key> 
            <string>Vol. 133 (2003-2004)</string> 
            <key>Children</key> 
            <array>         
                <dict> 
                    <key>Title</key> 
                    <string>No. 18 (Apr 2, 2004)</string> 
                    <key>Children</key> 
                    <array>                 
                        <dict> 
                            <key>Title</key> 
                            <string>Basketball concludes historic season</string> 
                            <key>URL</key> 
                            <string>http://orient.bowdoin.edu/orient/article_iphone.php?date=2004-04-02&amp;section=1&amp;id=1</string> 
                        </dict>

                        <!-- ... -->

                    </array>
                </dict>     
            </array>
        </dict>
    </array>
</dict>
</plist>

Example of what happens when it hits a curly apostrophe: Bu Chrome değil. Bu sefer delikten bir pizza hikayenin başlığını yarıda aşağı atlama, MS Word'ün sayımına göre, 5.998 karakterleri yedik; Ben yeniden eğer diğer bazı miktarda yeme, farklı davranabilir edeceğiz. Uygun başlık: Şarkıcı-söz yazarı Farrell '05 balonun ötesinde başarı bulur

                    <dict> 
                        <key>Title</key> 
                        <string>Singer-songwriter Farrell ing>Students embrace free pizza, College objects to solicitation</string> 
                        <key>URL</key> 
                        <string>http://orient.bowdoin.edu/orient/article_iphone.php?date=2009-09-18&amp;section=1&amp;id=9</string> 
                    </dict> 

MySQL bu başlık (binary) olarak depolanır:

53 69 6E 67 |65 72 2D 73 |6F 6E 67 77 |72 69 74 65
72 20 46 61 |72 72 65 6C |6C 20 C2 92 |30 35 20 66
69 6E 64 73 |20 73 75 63 |63 65 73 73 |20 62 65 79
6F 6E 64 20 |74 68 65 20 |62 75 62 62 |6C

Herhangi düzgün / decode kodlamak nasıl fikir? Eğer değilse, soruna başka bir şekilde nasıl alabilirim herhangi bir fikir var mı?

Ben haha, neden bahsettiğimi bir ipucu yok; Bana yardımcı olabilir herhangi bir yolu varsa bana bildirin. Çok teşekkürler :) Ve!

1 Cevap

Burada birkaç seçenek bulunuyor

  • Tabloda takarken htmlentities() özel karakterleri kodlamak için kullanılacak
  • UTF-8 için her şeyi değiştirmek
  • başlıkları yani etrafında CDATA kullanmayı deneyin

    <[CDATA [falan filan]]>