我有一個PHP文件,它根據從多個源導入的數據生成Xml站點地圖。由於導入數據的一行中存在非法字符,我的站點地圖目前沒有正確形成,但我正在努力將其刪除。Xml中的非法字符
該字符看起來代表'平方'或上標2,並表示爲正方形。我試過把它粘貼到一個十六進制編輯器中,但它被顯示爲?,並且十六進制代碼也對應於?。我也嘗試使用iconv從所有源編碼轉換到所有目的地編碼,沒有組合去除這個字符。
我也有以下函數刪除非ASCII字符:
function stripInvalidXml($value)
{
$ret = "";
$current;
if (empty($value))
{
return $ret;
}
$length = strlen($value);
for ($i=0; $i < $length; $i++)
{
$current = ord($value{$i});
if (($current == 0x9) ||
($current == 0xA) ||
($current == 0xD) ||
(($current >= 0x20) && ($current <= 0xD7FF)) ||
(($current >= 0xE000) && ($current <= 0xFFFD)) ||
(($current >= 0x10000) && ($current <= 0x10FFFF)))
{
if($current != 0x1F)
{
$ret .= chr($current);
}
}
else
{
$ret .= " ";
}
}
return $ret;
}
但是這仍然沒有刪除它。如果我單步執行代碼,非法角色會擴展到&#65535;在月食調試窗口中。它是一種與低於問題的字符串(希望它正確地貼)
251gm-50
上的功能的任何想法,這將刪除此字符,並防止這種形式的出現是非常感激 - 我沒有什麼控制權導入的數據,因此需要在Xml生成時完成。
編輯
張貼我可以看到的字符不能正確顯示後。在Eclipses窗口中查看時,它顯示爲&#65535; (不帶空格 - 如果我離開的空間在它呈現的特點,它看起來像&#65535;)
+1提示DOM – Gordon 2010-07-14 12:10:14
很好的建議 - 我繼承了一些代碼,生成XML作爲一個字符串,DOM會是一個更簡潔的方法 – Macros 2010-07-14 12:12:54
DOM可能會產生像RSS feed那樣的矯枉過正:他可能不需要所有的操作/搜索工具,而對於大文檔,DOM結構的內存佔用可能是過度 – Iacopo 2010-07-14 12:13:47