我写了这个函数,但它似乎没有保存$dom
。如果我在设置后检查属性,它是正确的,但它只是没有进入最终保存。
function tj_add_alts( $content ) {
$dom = new DOMDocument();
$dom->loadHTML($content);
foreach ($dom->getElementsByTagName( 'img' ) as $node) {
if ( trim( $node->getAttribute( 'alt' ) ) == "" ) {
$img = $node->getAttribute( 'src' );
$file_name = pathinfo($img, PATHINFO_FILENAME);
$name = preg_replace( '/[^A-Za-z0-9 ]/', ' ', $file_name);
$name = preg_replace( '/\s{2,}/', ' ', $name);
$node->setAttribute( 'alt', $name );
}
}
$content = $dom->saveHTML();
return $content;
}
更新:看起来问题是DomDocument会自动添加doctype
声明以及我不想要的<body>
和<head>
标签。有没有办法搭乘那些?
答案 0 :(得分:0)
您的意思是使用saveHTMLFile
方法吗?
请参阅:http://www.php.net/manual/en/domdocument.savehtmlfile.php
答案 1 :(得分:0)
我通过你的函数运行以下代码来测试它:
$content = <<<EOTAAA
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<h1>Image:</h1>
<img src="images/betsy.jpg" alt="Betsy eating an apple"/>
<img src="images/doug.jpg" alt=""/>
</body>
</html>
EOTAAA;
然后我回应了从函数返回的$content
的值。结果是你的功能很棒。 betsy.jpg
的图像标记没有任何内容,因为该函数仅在找到空alt
属性时才修改HTML。但是doug.jpg
的图片代码如下:
<img src="images/doug.jpg" alt="doug">
我猜这正是你想要它做的,所以如果有问题,它与你发布的代码无关。