我正在使用 php v5.3。我想将字符串转换为有效的 xml。Xml 显然需要将 '&' 字符编码为,&
但我能找到的所有函数也会将 'ë' 之类的字符转换为 xml 不接受的 html 实体(ë
在这种情况下)。我应该使用什么功能?
4 回答
htmlspecialchars
是你需要的。htmlentities
与 不同,它对转换的内容更具选择性。
从htmlentities
文档:
此函数在所有方面都与 htmlspecialchars() 相同,除了 htmlentities() 之外,所有具有 HTML 字符实体等效项的字符都将转换为这些实体。
<?php
$a = "I love things & stuffë";
$b = htmlspecialchars($a);
$c = htmlentities($a);
echo "$b\n$c\n";
输出:
I love things & stuffë
I love things & stuffë
如果您创建 XML,那么您可能已经准备好DOMDocument
了。即使没有,您也可以轻松创建一个。使用 aDOMDocument
您可以为 XML 创建 100% 格式正确的文本:
$text = "I'm using php v5.3. I would like to convert a string to valid xml. Xml apparently requires '&' characters to be encoded to & but all functions I can find which do this also convert characters like 'ë' to html entities xml doesn't accept (ë in this case). What function should I use?";
$doc = new DOMDocument();
echo $doc->saveXML($doc->createTextNode($text));
这将为您提供以下输出(逐字):
I'm using php v5.3. I would like to convert a string to valid xml. Xml apparently requires '&' characters to be encoded to &amp; but all functions I can find which do this also convert characters like 'ë' to html entities xml doesn't accept (&euml; in this case). What function should I use?
$str = preg_replace('/\s&\s/', '&', $str);
这将替换用尾随和结束空格包围的所有“&”。只需根据需要稍微制定模式
如果你只想转换 & 为&
你可以试试这个:
$encoded_str = str_replace('&','&',$original_str);
为了避免得到类似&amp;
如果你最初有一个&
,防止它的一种方法是&
先将所有转换为 &
$encoded_str = str_replace('&','&',str_replace('&','&',$original_str));