我有一個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&section=1&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&section=1&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
任何想法如何,我可以編碼/解碼正確的事情?如果沒有,任何想法如何以其他方式解決問題?
我不知道我在說什麼,哈哈;讓我知道如果有什麼辦法可以幫助你。 :)非常感謝!
需要注意的是,當使用CDATA時,它只能作爲XML使用,然後字符串']]>'必須再次轉義爲']]]>'(CDATA中唯一的特殊字符串)。 HTMLentities是首選,CDATA僅在作爲XML提供時纔有效。 – Zorf 2010-05-18 05:00:49
這類作品: utf8_encode(htmlspecialchars($ article [「title」])) XML至少不會被弄亂,但特殊字符完全丟失。也許我需要在iPhone/Obj-C方面做點什麼.... – Toph 2010-05-18 07:15:59