编程语言
首页 > 编程语言> > 使用PHP函数自动将宽度和高度属性添加到标签

使用PHP函数自动将宽度和高度属性添加到标签

作者:互联网

我想要的是一个可以在用户输入上运行的功能,该功能可以智能地找到width和height属性并将其添加到任何< img>标记在HTML的Blob中,以避免在加载图片时出现页面重排问题.

我正在为一个PHP论坛编写发布脚本,该脚本对用户的输入进行了清理,并且通常在将其写入数据库以供以后显示之前变得更好.作为使事情变得更好的一个示例,我有一个脚本,将alt属性插入图像,如下所示:

这是两张图片:< img src =“ http://example.com/image.png”> < img src =“ http://example.com/image2.png”>

通过发布脚本进行清理后,

这是两张图片:< img src =“ http://example.com/image.png” alt =“发布的图片”> < img src =“ http://example.com/image2.png” alt =“发布的图片”>

(这使它可以在HTML 4严格标准下进行验证,但可能不符合alt属性的精神-alas!)

因此,对于我的函数,我有一个模糊的想法,即服务器需要在它在HTML块中找到的每个外部图像上运行getimagesize(),然后将函数生成的属性应用于每个< img>碰到的标签.我假设此函数之前已经编写过,但是我对Google或php.net文档没有任何运气.我是否必须从头开始,还是有人意识到我可以使用或适应进行此工作的(相对)强大的功能?

解决方法:

您对getimagesize()是正确的.您可以简单地执行以下操作:

$img = 'image2.png';
$info = getimagesize($img);
printf('<img src="%s" %s>', $img, $info[3]);

如果图像托管在远程位置,则您必须下载所有图像(该功能负责),因此您可能需要缓存结果以加快后续请求的速度.

编辑:刚刚看到您有一个包含各种< img>的字符串.元素.这应该可以解决问题:

<?php
$html = <<<EOF
something <img src="https://www.google.com/images/logos/ssl_logo_lg.gif"> hello <img src="https://mail.google.com/mail/images/2/5/logo1.png">
EOF;

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

foreach ($dom->getElementsByTagName('img') as $img) {
    list($width, $height) = getimagesize($img->getAttribute('src'));
    $img->setAttribute('width', $width);
    $img->setAttribute('height', $height);
}

$xpath = new DOMXpath($dom);
$newDom = new DOMDocument();
foreach ($xpath->query('//body/p')->item(0)->childNodes as $node) {
    $newDom->appendChild($newDom->importNode($node, true));
}

$newHtml = $newDom->saveHTML();
?>

标签:getimagesize,html-sanitizing,html,php
来源: https://codeday.me/bug/20191024/1917055.html