十六进制不必要地计算

时间:2018-10-26 20:28:44

标签: php

我有一个PHP脚本,它将输出一个随机文件名,但是我有一个以十六进制数字命名的文件名,PHP显然计算出十六进制并以常规数字输出。该图像可以正确显示,但是在h3标签中显示该图像的回声不起作用。有没有办法阻止这种行为?

当我查看检查元素时,我会正确看到图像的来源为十六进制。

示例:

图片来源src="MemeDatabase/0000023E.jpg"

文本显示为574

$dir = 'MemeDatabase';
$fileNames = array();
if(is_dir($dir)){
    $handle = opendir($dir);
    while(false !== ($file = readdir($handle))){
        if(is_file($dir.'/'.$file) && is_readable($dir.'/'.$file)){
            $fileNames[] = $file;
        }
    }
closedir($handle);
$fileName = array_rand($fileNames); 
$withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $fileName);
echo "<a href=\"index.php\"><img src=\"MemeDatabase/$fileNames[$fileName]\"></a>";

} else {
    echo "<p>There is an directory read issue</p>";
}

if(!isset($_COOKIE["0ShowUsage"])) {
    echo "<h2>Click the image to proceed to the next meme</h2>";
    setcookie("0ShowUsage", "False", time() + (86400 * 30), "/"); // 86400 = 1 day
} else {
echo "<h3>$withoutExt</h3>";
}

1 个答案:

答案 0 :(得分:1)

如果十六进制数字以%开头,则在解析URL时将其视为十六进制代码,而不是PHP。您需要使用urlencode()对其进行正确编码。

echo "<a href=\"index.php\"><img src=\"MemeDatabase/" . urlencode($fileNames[$fileName]) . "\"></a>";