跟进我之前提到的post。
我发现在处理特殊字符时,XML实际上需要使用数字代码而不是名称代码。所以我在网上浏览了如何将特殊字符转换为数字代码,但我没有运气。
我是否必须编写一个函数来执行此任务,或者php是否附带任何可以节省大量工作的默认函数?
例如,我想将á
转换为á
,但不 á
转换为á
有可能吗?
如果您有任何想法,请提供帮助。
修改
我正在使用此建议将特殊字符转换为数字字符
$txt = preg_replace('/([\x80-\xff])/e', "'&#' . ord('$1') . ';'", $txt);
但我发现它没有将这5个特殊字符转换为数字代码 - <
,>
,&
,'
和"
。
我怎样才能绕过它们?
感谢。
答案 0 :(得分:3)
通用方法是使用:
$txt = preg_replace('/([\x80-\xff])/e', "'&#' . ord('$1') . ';'", $txt);
你必须确保$ txt确实包含Latin-1(utf8_decode
),因为否则你会从字符串字节中收到错误的值。
答案 1 :(得分:1)
使用mb_encode_numericentity
。示例(假设脚本以UTF-8编码):
<?php
header("Content-type: text/plain");
echo mb_encode_numericentity("aáb",
array(0x0080, 0x10FFFF, 0x0, 0xFFFFFF), "UTF-8");
会给:
aáb
此示例将所有不在ASCII中的字符编码到其数字实体。如果您还要对在XML中具有特殊含义的字符<
,>
,&
,'
和"
进行编码,请使用{{1} (或使用htmlspecialchars
,但在第二个参数中将这些字符添加到数组中。)
但请注意,如果您的XML文件是以UTF-8编码的,则只需编码几个字符(mb_encode_numericentity
不是其中之一)。有关á
中使用的相应转化地图,请参阅here(这包括转换XML特殊字符mb_encode_numericentity
,<
,>
,{{1 }和&
并且还编码禁止在XML文档中出现的字符,例如U + 0000。
答案 2 :(得分:0)
这里提供了一个简洁的功能http://www.sourcerally.net/Scripts/39-Convert-HTML-Entities-to-XML-Entities。您将html_entities链接到显示的函数以获取text-&gt; html-&gt; xml
不,php没有内置功能,如xml_entities