1
PHP的XML解析器調用默認處理函數兩次當它遇到字符串中的特殊字符,因此分裂的字符串。我試着在PHP代碼中使用不同的編碼在XML頭一樣好解決,但它仍然分裂的字符串:PHP XML解析器xml_set_default_handler分裂特殊字符
<variable name="GZH29" type="integer">
<label>This is a small test with a special ë character. Let's try an ë character too</label>
</variable>
人們期望:該XML的
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_set_element_handler($parser, "startTag", "endTag");
xml_set_default_handler($parser, 'defaultHandler');
function startTag($p, $name, $attributes)
{
}
function endTag($p, $name)
{
}
function defaultHandler($parser, $data)
{
if(strlen(trim($data)) > 0)
echo '[' . $data . ']' . '<br />';
}
例:
[This is a small test with a special ë character. Let's try an ë character too]
但結果是
[This is a small test with a special ]
[ë character. Let's try an ë character too]
我想不要分割線,所以不知道解決方案是什麼?
我想提取每個'的XML的label'標籤轉換爲一個字符串並將其插入到數據庫中。我也用'xml_set_character_data_handler'試過了它,但它給出了相同的結果。這是一個包含1000個這樣的'variable'和'label'標籤的大型XML文件。 – Postie 2012-01-03 07:05:40
一個可能的選項:將目標編碼設置爲UTF-8 - 它具有所有字符並且不需要實體 - 並且在獲得UTF-8文本後,將其重新編碼爲ISO-8859-1,可能在您贏得音頻時進行轉碼無法將文本的每個字符作爲Latin-1插入到數據庫中。聽起來很實際? – hakre 2012-01-03 08:24:09
我已經嘗試了幾種編碼方式來編譯目標和源代碼。將XML編碼更改爲UTF,但仍然無效。奇怪的是,它只會在第一個特殊字符上打破。 不知道PHP中的XMLReader類,更改了代碼以使用該類,這沒有任何問題。 – Postie 2012-01-03 08:50:00