2010-05-18 72 views
0

我有一個MySQL報刊文章數據庫。有一個卷表,一個問題表和一個文章表。我有一個PHP文件,生成一個屬性列表,然後拉入iPhone應用程序中讀取。 plist將每篇文章作爲每個問題中的字典,並將每個問題作爲每個卷內的字典。 plist實際上並不包含整篇文章 - 只是一個標題和URL。MySQL數據庫中的特殊字符(例如,捲曲撇號)正在損壞我的XML

一些文章標題包含特殊字符,如捲曲撇號。看着生成的XML plist,只要它碰到一個特殊的字符,就會無法預知地吞噬一大堆文本,從而使XML變得無法讀取。

(無論如何,我在iPhone上猜測,Firefox實際上處理得很好,在黑色鑽石中顯示白色,代替任何特殊字符,也不會吞噬任何東西。)

例,形成良好的plist片段:當它擊中捲曲的撇號會發生什麼

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

舉例:這是從Chrome中。這一次它吃了5,998個字符,按照MS Word的計數,一直跳到比薩餅故事標題開頭的中途;如果我重新加載它會有不同的表現,吃一些其他的數額。正確的標題是:創作歌手法瑞爾'05找到成功超越

    <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這個稱號被存儲爲(二進制)泡沫:

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 

任何想法如何,我可以編碼/解碼正確的事情?如果沒有,任何想法如何以其他方式解決問題?

我不知道我在說什麼,哈哈;讓我知道如果有什麼辦法可以幫助你。 :)非常感謝!

回答

0

在表中插入

  • 改變一切,以UTF-8
  • 在這裏的幾個選項

    • 使用htmlentities()來編碼特殊字符嘗試使用CDATA周圍的職稱,即

      < string> <![CDATA [BLAH BLAH BLAH]]> </string>

  • +0

    需要注意的是,當使用CDATA時,它只能作爲XML使用,然後字符串']]>'必須再次轉義爲']]]>'(CDATA中唯一的特殊字符串)。 HTMLentities是首選,CDATA僅在作爲XML提供時纔有效。 – Zorf 2010-05-18 05:00:49

    +0

    這類作品: utf8_encode(htmlspecialchars($ article [「title」])) XML至少不會被弄亂,但特殊字符完全丟失。也許我需要在iPhone/Obj-C方面做點什麼.... – Toph 2010-05-18 07:15:59