XML中的非法非标引号

时间:2012-02-03 01:31:15

标签: php xml quotes

我在我的网站上允许一些用户输入,稍后用XML读取。每隔一段时间我就会得到这些奇怪的单引号或双引号,如”’。这些是直接从破坏我的XML的源复制的。我想知道是否有一种简单的方法来纠正我的xml中的这些类型的字符。 htmlentities似乎没有触及他们。

这些角色来自哪里?我甚至不确定如何无意中输入它们。

编辑 - 我忘了澄清这些引用没有在属性中使用,但是以下列方式:

<SomeTag>User’s Input</SomeTag>

5 个答案:

答案 0 :(得分:2)

不要禁止和/或修改外国字符;这对你的用户来说太烦人了!这只是一个编码问题。我不知道您使用什么解析器来读取XML,但如果它相当复杂,您可以通过在XML文件的顶部包含以下编码编译指示来解决您的问题:

<?xml version="1.0" encoding="UTF-8"?>

解析器的API中可能还有一个UTF-8选项。

编辑:我刚刚读到您正在浏览器中直接读取XML。大多数浏览器都会听编码编译指示!

编辑2 :显然,这些引号在UTF-8中甚至不合法,所以请忽略我上面所说的内容。相反,您可能会找到您正在寻找的here,其中正在讨论类似的问题。

答案 1 :(得分:2)

这些引用是在文本内容中使用还是用于分隔属性?对于属性分隔符,XML需要打字机引号(单引号或双引号)。微软和其他文字处理应用程序经常试图变得聪明,并用打印报价取代打字机报价,这几乎肯定是“它们来自哪里?”这个问题的答案。

如果您需要摆脱它们,使用文本编辑器进行简单的全局替换可以很好地完成工作。

但是你可能会先尝试解决它们导致问题的原因。也许你的数据流无法处理任何非ASCII字符,在这种情况下,这是一个你真正应该解决的更深层次的问题(通常意味着一些不需要的转码在某个地方徘徊)。

答案 2 :(得分:1)

远离MicroSoft Office应用程序。 Word,Excel等习惯用非标准的“智能引号”替换匹配的单引号和双引号。

这些引号字符是真正的非标准字符,从未成为官方的latin-1字符集。所有MS Office应用程序都“帮助”用这些可恶的名称替换标准引号字符。

只需谷歌“撤消smatquotes”或“转换智能引号”以获取提示提示和正则表达式以摆脱这些。

答案 3 :(得分:1)

如果输入字符串是UTF-8编码的,您可能需要指定htmlentities(),例如:

$html = htmlentities( '”’', ENT_COMPAT, "utf-8" );
echo $html;

对我来说:

&rdquo;&rsquo;

$html = htmlentities( '”’' );
echo $html;

感到困惑:

&acirc;??&acirc;??

如果输入字符串是非UTF-8,那么您需要相应地调整htmlentities()的编码arg。

答案 4 :(得分:0)

使用

&#xA;&#xA;
  $ s ='用户输入';&#xA; $ descriptfix = preg_replace('/ [“”] /','\“',$ s);&#xA; $ descriptfix = preg_replace('/ [''] /','\'',$ descriptfix); &#xA; echo“&lt; SomeTag&gt; htmlentities($ s)&lt; / SomeTag&gt;”;&#xA;  
&#xA;