使用PHP函数自动将宽度和高度属性添加到<img>标记

Sui*_*ase 3 html php html-sanitizing getimagesize

我要的是我可以在用户输入,将智能查找和添加的运行功能widthheight属性,任何<img>在HTML中的BLOB标记,以避免页面-回流问题,同时图像加载.

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

Here are two images: <img src="http://example.com/image.png"> <img src="http://example.com/image2.png">

在通过发布脚本进行消毒后,它就变成了

Here are two images: <img src="http://example.com/image.png" alt="Posted image"> <img src="http://example.com/image2.png" alt="Posted image">

(这使得它在HTML 4下严格验证,但可能不符合alt属性的精神 - 唉!)

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

Dan*_*erg 5

你是对的getimagesize().你可以简单地做这样的事情:

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

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

编辑:刚看到你有一个包含各种<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();
?>
Run Code Online (Sandbox Code Playgroud)

  • 实际上,无论图像存储在何处,缓存结果都是一个好主意. (2认同)