如何在解析时过滤特殊字符?

时间:2011-01-09 01:31:34

标签: php

嗨我正在用php dom文件进行html追求 我在结果中得到一些特殊的字符,如何过滤相同的?

foreach ($fdats as $fdat)
{
    foreach($fdat->getElementsByTagName('a') as $mdat)
    {
                $comb[] = trim($mdat->nodeValue);
    }

}

,HTML就是这样的

<div class="content1" id="user" style="width: 47%; margin-right: 20px;">
<div class="ad  first_row">
<p class="ad" style="width: 70%;">
<a href="/site/users"><img class="dynamic-icon">&nbsp; James</a>
</p>

输出为Â James,如何摆脱Â

2 个答案:

答案 0 :(得分:0)

他们被称为html实体。您可以使用以下函数将它们转换为真实形式:

http://us.php.net/manual/en/function.html-entity-decode.php

同样,&nbsp;转换为ascii代码160,这是一个双字节字符。这就是为什么它表现为一个奇怪的角色。如果要删除双字节字符,可能需要使用iconv()函数。

$ text = iconv(“UTF-8”,“ISO-8859-1 // IGNORE”,$ text);

http://us.php.net/manual/en/function.iconv.php

答案 1 :(得分:0)

我相信Â_是UTF-8的实现。通过DOM方法提取时,&nbsp;成为unicode字符U+00A0

您可以在utf8_decode()之前使用trim()来摆脱它。 那应该将它转换为常规空间。嗯,也许不是。 Latin-1拥有自己的0xA0。因此,最好使用正则表达式/\s/U覆盖它。