-1

我写了这个函数,但它似乎没有保存$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>有没有办法摆脱那些?

4

2 回答 2

0

您的意思是使用该saveHTMLFile方法吗?

见:http ://www.php.net/manual/en/domdocument.savehtmlfile.php

于 2013-07-01T16:12:51.350 回答
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时才修改 HTML 。alt然而,图像标签doug.jpg如下:

<img src="images/doug.jpg" alt="doug">

我猜这正是你想要它做的,所以如果有问题,它与你发布的代码无关。

于 2013-07-01T16:39:58.960 回答