从网站获取标题,解码HTML实体

时间:2014-01-04 03:55:36

标签: php

我非常接近放弃这个。从我所看到的,这应该很容易,但我尝试的任何东西都接近正确的结果。

我正在从网站上抓取标题,我想确保所有HTML实体都转换回正确的字符。

$html = file_get_contents('http://www.metacafe.com/watch/10859663/samsung_galaxy_products_rettingers_rants_technobuffalo/');

$doc = new DOMDocument();
@$doc->loadHTML($html);

$nodes = $doc->getElementsByTagName('title');
$urlTitle = $nodes->item(0)->nodeValue;

$urlTitle = html_entity_decode($urlTitle, ENT_QUOTES);

以上的输出是:

Samsung Galaxy Products - Rettinger's Rants - TechnoBuffalo - Video

上面的代码示例实际上只是我试图使其工作的一部分内容(包括在html_entity_decode上强制使用UTF-8字符集,这不应该是必需的,因为我使用PHP 5.4并且应该是默认的无论如何)。我已经看到了很多提示和提示,但它们似乎都没有什么区别。

如果任何人有一个新的例子,我会非常感激。

非常感谢

2 个答案:

答案 0 :(得分:0)

我会去,只需使用

手动将所有字符恢复正常
str_replace();

http://us3.php.net/str_replace

答案 1 :(得分:0)

行。我觉得有点傻。

原来标题正在被正确解码,但在我的视图类的其他地方,输出再次使用htmlspecialchars进行转义......

但是,我认为至少分享完成的代码是正确的。我之前简化了它。这是使用Zend Framework的实际代码:

$html = $request->getBody();

$dom = new Zend_Dom_Query($html);

$urlTitle = $dom->query('title');
if ($urlTitle->count())
{
    $urlTitle = $urlTitle->current()->nodeValue;
    $urlTitle = html_entity_decode($urlTitle, ENT_QUOTES, 'UTF-8');
    $urlTitle = htmlspecialchars_decode($urlTitle, ENT_QUOTES);
}
else
{
    $urlTitle = '';
}

$urlDescription = $dom->query("meta[name='description']");
if ($urlDescription->count())
{
    $urlDescription = $urlDescription->current()->getAttribute('content');
    $urlDescription = html_entity_decode($urlDescription, ENT_QUOTES, 'UTF-8');
    $urlDescription = htmlspecialchars_decode($urlDescription, ENT_QUOTES);
}
else
{
    $urlDescription = '';
}

return array($urlTitle, $urlDescription);

我发现了一些需要解码的示例,上面的代码正确地完成了它们。上面的代码还包括正确的查询,以便从页面获取元描述。

感谢所有花时间发表评论和回答的人。