符号问题(scandir、array_diff、foreach)

problems with symbols (scandir, array_diff, foreach)

我正在尝试编写一个脚本来打开目录,扫描所有文件(图像)并将其显示在屏幕上,但问题是,它的名称中包含符号,而 scandir 无法处理它。

名称中没有符号的目录没问题,脚本运行完美,但是名称中有符号的 directories/files 是个大问题。

例如,我共有 2 个目录,该目录中的所有文件的名称中都包含相同的符号。一个包含“®”,另一个包含“™”,每个文件(图像)的名称中都有这些符号,例如:"Right® screen452217.jpg"。因此,重命名目录和文件不是一种选择,这会花费太多时间。

也许有更好的方法,但我直接从屏幕上的 url 使用 $_GET 进行。它现在在本地服务器上,我在 VertrigoServ WAMP 服务器上工作,然后脚本看起来像:

http://127.0.0.1/screenshots/index.php?page=Rights®
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks™

$url = "screens/".$_GET["page"]."";
$scan = scandir($url, SCANDIR_SORT_NONE);
$scaned = array_diff($scan, array('.', '..', 'Thumbs.db'));

foreach($scaned as $shots) {

    if ($shots <> "thumbnails") {

echo "<li>".PHP_EOL.
     " <img width=\"253\" height=\"158\" src=\"".$url."\".$shots."\"".
     "  alt=\"".$shots."\" title=\"".$shots."\".
     " </li>".PHP_EOL.PHP_EOL;

    }

}

scandir 报告这些错误:

The system cannot find the file specified. (code: 2)
failed to open dir: No such file or directory
No such file or directory

array_diff 报告此错误:

Argument #1 is not an array

最后是 foreach 报告:

Invalid argument supplied for foreach()

我也尝试用 mb_convert_encoding() and iconv() 更改编码,但没有成功。

我最好的结果是在更改 url 之后,我使用 windows-1252 ASCII Encoding Reference:

而不是使用“®”或“™”
http://127.0.0.1/screenshots/index.php?page=Rights%AE
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks%99

然后一切顺利通过,但是 "img src" 没有显示图像,而是像:

screens/Rights�\Right�452217.jpg

还是有问题,因为图片不显示。我喜欢坚持使用 scandir,因为我已经完成了页面,但我无法通过符号解决这个问题。你能帮帮我吗?

其实比我想象的要简单。问题是,该目录的名称中已经包含符号,因此我必须将其更改为 Windows-1252,如下所示:

$page = $_GET["page"];

if (strpos($page, '®')) {$page = str_replace('®', '%AE', $page);}
if (strpos($page, '™')) {$page = str_replace('™', '%99', $page);}

然后网址从:

http://127.0.0.1/screenshots/index.php?page=Rights®
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks™

收件人:

http://127.0.0.1/screenshots/index.php?page=Rights%AE
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks%99

然后就简单了,在scandir后面加一个编码,在foreach中加一个:

$url = "screens/".$_GET["page"]."";
$scan = scandir($url, SCANDIR_SORT_NONE);
$scaned = array_diff($scan, array('.', '..', 'Thumbs.db'));

$url = iconv("windows-1252", "UTF-8", $screen_uplay);

foreach($scaned as $shots) {

    if ($shots <> "thumbnails") {

    $shots = iconv("windows-1252", "UTF-8", $shots);

echo "<li>".PHP_EOL.
     " <img width=\"253\" height=\"158\" src=\"".$url."\".$shots."\"".
     "  alt=\"".$shots."\" title=\"".$shots."\".
     " </li>".PHP_EOL.PHP_EOL;

    }

}

就这么简单。也许有更好的方法,但这对我有用,我同意。