我在我的网站上允许一些用户输入,稍后用XML读取。每隔一段时间我就会得到这些奇怪的单引号或双引号,如”’
。这些是直接从破坏我的XML的源复制的。我想知道是否有一种简单的方法来纠正我的xml中的这些类型的字符。 htmlentities似乎没有触及他们。
这些角色来自哪里?我甚至不确定如何无意中输入它们。
编辑 - 我忘了澄清这些引用没有在属性中使用,但是以下列方式:
<SomeTag>User’s Input</SomeTag>
答案 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;
对我来说:
”’
而
$html = htmlentities( '”’' );
echo $html;
感到困惑:
â??â??
如果输入字符串是非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;