gpt4 book ai didi

php - getElementByTagName 和 getAttribute 区分大小写 - PHP

转载 作者:数据小太阳 更新时间:2023-10-29 02:35:19 26 4
gpt4 key购买 nike

我创建了一个简单的 PHP 脚本,它解析 HTML 文档并使用 getElementByTagName 和 getAttribute 返回元标记。除了一件事,它工作得很好,如果 HTML 标签不是小写的,那么它不会返回标签的内容。例如:

<title>My Title</title>

将返回“我的标题”但是

<Title>My Title</Title>

<TITLE>My Title</TITLE> 

不会返回任何内容。无论大小写如何,有没有简单的方法让它与标签匹配?我猜它可能涉及正则表达式。

下面的代码示例:

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

$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
$description = $meta->getAttribute('content');
if($meta->getAttribute('name') == 'keywords')
$keywords = $meta->getAttribute('content');
if($meta->getAttribute('name') == 'robots')
$robots = $meta->getAttribute('content');
}

最佳答案

DOMDocument::loadHtml() 将所有元素转换为小写(并删除 namespace )。这是一个小演示:

$html = <<<'HTML'
<html><Body><Title>My Title</Title></Body></html>
HTML;

$dom = new DOMDocument();
$dom->loadHtml($html);
echo $dom->saveHtml();

输出:https://eval.in/145538

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><title>My Title</title></body></html>

Xml 区分大小写。因此,如果您将某些内容作为 XML 加载,它将保持元素的原样:

$html = <<<'HTML'
<html><Body><Title>My Title</Title></Body></html>
HTML;

$dom = new DOMDocument();
$dom->loadXml($html);
echo $dom->saveXml();

输出:https://eval.in/145539

<?xml version="1.0"?>
<html><Body><Title>My Title</Title></Body></html>

这将影响 DOM 方法和 Xpath:

$html = <<<'HTML'
<html><Body><Title>My Title</Title></Body></html>
HTML;

$dom = new DOMDocument();
$dom->loadHtml($html);

var_dump(
// One element "title"
$dom->getElementsByTagName('title')->length
);

$xpath = new DOMXpath($dom);
var_dump(
// "title" as string
$xpath->evaluate('string(//title)')
);

输出:https://eval.in/145541

int(1)
string(8) "My Title"

关于php - getElementByTagName 和 getAttribute 区分大小写 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23426745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com