使用PHP处理特殊符号(即TM而不是¢)

时间:2012-03-10 20:26:27

标签: php

我正在尝试阅读包含™(™)的XML文档,但出于某种原因,无论我尝试什么,它总是显示为¢。

例如:

$xml = new SimpleXMLElement('<item><title>test</title></item><item><title>&#x2122;</title></item>');
foreach ($xml->item AS $item)
{
    echo $item->title . "<br />";
}

Results in:
test
â„¢

为了清楚起见,我不希望它只是恰当地显示,我需要将它插入数据库。

谢谢!

4 个答案:

答案 0 :(得分:1)

原始帖子中的代码可以正常使用,至少我添加了<xml>个标签。确保HTML页面的内容编码设置正确,即发送HTTP标头Content-Type:text/html; charset=UTF-8或在<head>中设置此标头。将包含此符号的字符串插入数据库时​​,首先使用SET NAMES UTF8将字符集设置为UTF-8。当然,您要插入的数据库/表/字段也应设置为UTF8。

答案 1 :(得分:0)

尝试使用utf8_decode或utf8_encode php函数。他们应该把它转换成正确的角色。

echo utf8_decode($this->title);

答案 2 :(得分:0)

在将整个字符串加载到simplexmlelement之前,对整个字符串运行htmlentities()。这将转换PHP识别为html实体的任何内容(例如£,&amp;,€)。这将允许您将它们存储在您的数据库中,而无需使用所有mb *函数,以及您需要在数据库中跳过UTF8支持所需的所有其他环节。

如果你有任何真正的特殊字符无法以这种方式编码,这将无效。

答案 3 :(得分:-1)

如果php正确地从XML文件中获取它,并且问题是将其输出到您的数据库中,请使用htmlspecialchars,它将所有符号转换为它们的html等价物。该符号将存储为“™”,当您从数据库中检索时,可以很好地处理该符号。