PHP通过basename()输出错误编码的HTML src

时间:2016-01-14 14:49:32

标签: php html encoding

以下PHP代码在目录images/galerias/minerales/brutos/中查找文件,并根据其中的文件夹/图像输出HTML。

<?php
    $folders = glob('images/galerias/minerales/brutos/*', GLOB_ONLYDIR);
    foreach($folders as $folder) {
        echo "<section id='".str_replace(' ', '', (basename($folder)))."' class='gallery'><div id='categoryimg'><p>".basename($folder)."</p></div><!-- SECTION -->".PHP_EOL;
            $files = glob("images/galerias/minerales/brutos/".basename($folder)."/*.{jpg}", GLOB_BRACE);
            foreach($files as $file) {
                echo "<div>".PHP_EOL."    <p>".basename($file, ".jpg")."</p>".PHP_EOL."    <img src='$file' alt='".basename($file, ".jpg")."'>".PHP_EOL."</div>".PHP_EOL;
            }
        echo "</section>";
    }
?>

这在我的本地服务器上完美运行,但在实时服务器上它输出(以及其他不相关的行)这样的东西:

<img src='images/galerias/regalosmagicos/Otros/Atrapasue#U00f1os.jpg' alt='Atrapasue#U00f1os'>

注意错误编码的“Atrapasueños”,显示为“Atrapasue#U00f1os”。这会导致网站无法呈现文件名中包含特殊字符的图像。考虑到这在我的服务器上运行良好,我想找到一个建议,我应该在我的服务器中更改配置,以便让我的PHP输出正确编码行。

1 个答案:

答案 0 :(得分:2)

我自己修复了 - 问题不是服务器和PHP脚本,但我发现每当我上传一个名为IRRELEVANT_LINE_1="irrelevantValue1" ARGS="value some_value=true" IRRELEVANT_LINE_2="irrelevantValue2" 的文件时,cPanel文件管理器会自动更改它Sandía.jpg或类似的东西。所以我还需要解决其他问题,但至少我知道我的代码从一开始就有用。

  • cPanel版本:cPanel,Inc。11.52.2.2

  • cPanel语言设置为:西班牙语

更新

cPanel文件管理器不仅存在问题,而且Kubuntu的 Ark 存档管理器也存在问题。两者都引入了编码问题真是一团糟,只要考虑到编码问题可能来自任何地方。

我在这里留下这个答案,因为它可能会帮助其他人认为他们有服务器端编码问题而他们可能也想检查cPanel文件管理器。