Php 文档和HTML实体

Php 文档和HTML实体,php,character-encoding,domdocument,Php,Character Encoding,Domdocument,我试图解析一些包含一些HTML实体的HTML,比如× $str = '<a href="http://example.com/"> A &#215; B</a>'; $dom = new DomDocument; $dom -> substituteEntities = false; $dom ->loadHTML($str); $link = $dom ->getElementsByTagName('a') ->

我试图解析一些包含一些HTML实体的HTML,比如×

$str = '<a href="http://example.com/"> A &#215; B</a>';

$dom = new DomDocument;
$dom -> substituteEntities = false;
$dom ->loadHTML($str);

$link = $dom ->getElementsByTagName('a') -> item(0);
$fullname = $link -> nodeValue;
$href = $link -> getAttribute('href');

echo "
fullname: $fullname \n
href: $href\n";    
$str='';
$dom=新的DomDocument;
$dom->substituteEntities=false;
$dom->loadHTML($str);
$link=$dom->getElementsByTagName('a')->item(0);
$fullname=$link->nodeValue;
$href=$link->getAttribute('href');
回声“
全名:$fullname\n
href:$href\n”;
但DomDocument将文本替换为AÃ-B


有没有什么方法可以防止它对HTML实体使用&而让它不受影响?我试图将substitutentities设置为false,但它没有任何作用

您确定要将&替换为
&?如果是这样的话,你会看到确切的实体,作为文本,而不是你得到的乱七八糟的响应

我的猜测是,它被转换为实际字符,并且您正在使用拉丁字符集查看页面,该字符集不包含此字符,因此出现了乱码响应

如果我呈现您的示例,我的输出是:

fullname:  A × B 

href: http://example.com/

在latin1/iso-8859-1中查看时,我看到了您描述的输出。但是,当我将字符集设置为UTF-8时,输出很好。

这不是对问题的直接回答,但您可以使用UTF-8,它允许您直接保存÷或×等字形。在其他需要上使用UTF-8和PHPDOM

此外,如果您试图显示数学公式(如A×B所示),请查看文档中的。

DOM扩展使用UTF-8编码。
使用utf8_encode()和utf8_decode()处理ISO-8859-1编码中的文本,或使用Iconv处理其他编码中的文本

假设您使用的是拉丁语-1,请尝试:

<?php
header('Content-type:text/html;charset=iso-8859-1');


$str = utf8_encode('<a href="http://example.com/"> A &#215; B</a>');

$dom = new DOMDocument;


$dom -> substituteEntities = false;
$dom ->loadHTML($str);

$link = $dom ->getElementsByTagName('a') -> item(0);
$fullname = utf8_decode($link -> nodeValue);
$href = $link -> getAttribute('href');

echo "
fullname: $fullname \n
href: $href\n";    ?>


我通过使用BOM将UTF-8转换为UTF-8解决了实体损坏的问题。

为什么要保留它们?我只是想,我真正想做的是用x替换它们,因为这会将文本的格式与我正在更新的刮板中的一些旧代码相同,我完全不知道如何在regext中包含这些符号这很奇怪,因为我是从代码中复制响应的。不管怎样,我使用了utf8_编码和deccode,它成功了。谢谢如果您在浏览器中查看响应,它会自动尝试确定字符集。因此,如果你想查看实际输出,最好查看页面源代码。是的,我的意思是我用chrome查看页面源代码,我在那里得到了我粘贴的图片,只是使用utf8_编码和解码,但我会阅读你使用的所有其他DBTW,我使用了,但顺序相反-因为我的初始数据已经编码。很好,谢谢!感谢黑客,它解决了我的问题(即使我的所有UTF-8实体仍然被HTML实体取代…)。现在是2013年,我们仍然需要使用一个技巧来正确处理UTF-8:-(这个答案是低值的,因为所有的洞察都是在场外进行的。不,洞察在答案中-缺少的是复制粘贴片段。。。。