问题描述
我正在尝试编写一个Joomla插件,以向HTML文件中的每个<img>
添加宽度和高度标签。
一些图像文件名是波斯语,并且getimagesize遇到错误。
代码是这样的:
@$dom->loadHTML('<?xml version="1.0" encoding="UTF-8"?>' . "\n" . '
<!DOCTYPE html>
<html>
<head>
<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<img src="images\banners\س.jpg" style="max-width: 90%;" >
</body>
</html>
');
$x = new DOMXPath($dom);
foreach($x->query("//img") as $node)
{
$imgtag = $node->getAttribute("src");
$imgtag = pathinfo($imgtag);
$imgtag = $imgtag['dirname'].'\\'.$imgtag['basename'];
$imgtag = getimagesize($imgtag);
$node->setAttribute("width",$imgtag[0]);
$node->setAttribute("height",$imgtag[1]);
}
$newHtml = urldecode($dom->saveHtml($dom->documentElement));
警告:getimagesize(images \ banners \س。jpg):无法打开流:C:\ wamp64 \ www \ plugin.PHP中没有此类文件或目录
我该如何解决?
解决方法
感谢所有人, 我无法在WAMP服务器(Windows上的本地服务器)上获得结果, 但是当我迁移到Linux服务器时,此代码终于可以正常工作了。
$html = $app->getBody();
setlocale(LC_ALL,'');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$x = new DOMXPath($dom);
foreach($x->query("//img") as $node)
{
$imgtag = $node->getAttribute("src");
if(strpos($imgtag,"data:image")===false)
{
$imgtag = getimagesize($imgtag);
$node->setAttribute("width",$imgtag[0]);
$node->setAttribute("height",$imgtag[1]);
}
}
$bodytag = $x->query("//body");
$node = $dom->createElement("script",' /* java script which may be necessary on client */ ');
$bodytag[0]->appendChild($node);
$html = '<!DOCTYPE html>'."\n" . $dom->saveHtml($dom->documentElement);
一些提示:
- 该代码不应接触base64图像源,因此我在代码中添加了一个条件。
- 如果应将某些脚本(或任何其他div,p,...)添加到body标签,则可以使用appendChild方法。
-
<!DOCTYPE html>
应该添加到最终的DOM对象输出中:)