我有一个 PHP 文件,它根据从多个来源导入的数据生成 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;
}
然而,这仍然没有删除它。如果我单步执行代码,非法字符将扩展到 Eclipse 调试窗口中。它有问题的字符串如下(希望它正确粘贴)
251gm-50
任何有关删除此字符并防止出现此形式的函数的想法都非常受欢迎 - 我对导入的数据几乎没有控制,因此需要在 Xml 生成时完成。
EDIT
发布后我发现该角色显示不正确。在 Eclipses 窗口中查看时,它显示为 ; (没有空格 - 如果我在其中留有空格,则会呈现字符,看起来像)
您正在尝试执行字符转码。不要自己做,使用 PHP 库。
I found iconv
非常有用:
$cleanText = iconv('UTF-8','ISO-8859-1//TRANSLIT//IGNORE', $srcText);
此代码从 utf-8 转换为 iso-8859,尝试重新映射“外来”字符并忽略无法转码的字符。
我只是猜测源编码是utf-8。您必须发现传入数据正在使用哪种编码,并在 XML 标头中声明的编码中进行转换。
猜测文件编码的 Linux 命令行工具是enca
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)