Специальные символы из базы данных MySQL (например, фигурные апострофы) искажают мой XML - PullRequest
0 голосов
/ 18 мая 2010

У меня есть база данных газетных статей в MySQL. Там есть таблица томов, таблица вопросов и таблица статей. У меня есть файл PHP, который генерирует список свойств, который затем извлекается и читается приложением iPhone. Плист содержит каждую статью в виде словаря внутри каждого выпуска, а каждый выпуск - в виде словаря внутри каждого тома. На самом деле plist содержит не всю статью, а только заголовок и URL.

Некоторые заголовки статей содержат специальные символы, такие как фигурные апострофы. Глядя на сгенерированный XML-список, всякий раз, когда он сталкивается со специальным символом, он непредсказуемо поглощает целую кучу текста, оставляя XML искаженным и нечитаемым.

(... в Chrome, во всяком случае, и я предполагаю, что на iPhone. Firefox на самом деле справляется с этим довольно хорошо, показывая белый? Черный алмаз вместо каких-либо специальных символов и ничего не сожрав.)

Пример правильно сформированного фрагмента списка:

<!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. На этот раз, по подсчетам MS Word, он съел 5 998 символов, пропустив до середины открытия заголовок истории о пицце; если я перезарядлю его, он будет вести себя по-другому, съедая какое-то другое количество. Правильное название: певец-автор песен Farrell ’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

Есть идеи, как правильно кодировать / декодировать вещи? Если нет, есть идеи, как я могу обойти проблему другим способом?

Понятия не имею, о чем я говорю, хаха; дайте мне знать, если я смогу помочь вам помочь. :) И большое спасибо!

1 Ответ

0 голосов
/ 18 мая 2010

вот несколько вариантов

  • используйте htmlentities() для кодирования специальных символов при вставке в таблицу
  • изменить все на UTF-8
  • попробуйте использовать CDATA вокруг названий, т.е.

    <! [CDATA [БЛА БЛА БЛА БХ]]>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...