带有波斯文件名的php getimagesize

问题描述

我正在尝试编写一个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显示

警告: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);

一些提示:

  1. 该代码不应接触base64图像源,因此我在代码中添加了一个条件。
  2. 如果应将某些脚本(或任何其他div,p,...)添加到body标签,则可以使用appendChild方法。
  3. <!DOCTYPE html>应该添加到最终的DOM对象输出中:)