使用php将特殊字符转换为ISO Latin-1代码?

时间:2011-01-24 23:49:12

标签: php xml special-characters

跟进我之前提到的post

我发现在处理特殊字符时,XML实际上需要使用数字代码而不是名称代码。所以我在网上浏览了如何将特殊字符转换为数字代码,但我没有运气。

我是否必须编写一个函数来执行此任务,或者php是否附带任何可以节省大量工作的默认函数?

例如,我想将á转换为á,但 á转换为á

有可能吗?

如果您有任何想法,请提供帮助。

修改

我正在使用此建议将特殊字符转换为数字字符

$txt = preg_replace('/([\x80-\xff])/e', "'&#' . ord('$1') . ';'", $txt);

但我发现它没有将这5个特殊字符转换为数字代码 - <>&'"

我怎样才能绕过它们?

感谢。

3 个答案:

答案 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&#225;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