DomDocument不保存

时间:2013-07-01 16:08:15

标签: php dom domdocument

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

2 个答案:

答案 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">

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