PHP 函数 in_array 无法识别变音符号
PHP function in_array doesn't recognize diacritic
我有一个代码可以 运行 遍历文件并获取所有图像。
$img = '/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/2018_07_DogOwner_VS_CatOwner_655x368_NL-500x281.jpg';
$dir = preg_replace('#[^/]*$#', '', $img);
$image_files = scandir($dir);
$image_name = @array_pop(explode('/', $img));
$find = $image_name;
var_dump(in_array($find, $image_files));
在这个例子中我运行只通过一张图片。此代码 returns 正确。问题是当我有一个图像时,例如德国标志 (hundezubehör-für-sommer.jpg)。
$img = '/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg';
这 returns 错误。知道为什么这不起作用吗?
已编辑:
我几天前问过这个问题:. The solution to this is here: https://3v4l.org/T7lfU。我认为的问题是当我 运行 来自 scandir 的代码时它找不到变音符号。
尽管字符串字母表,in_array
函数仍然有效。我想问题的发生是因为你的 PHP 文件和文件系统使用不同的编码,因此 scandir
读取的值有另一种编码,因此它不同于代码中写入的 $img
值。
尝试转换 scandir
结果的编码,使其与 PHP 文件编码匹配。例如:
// ...
$image_files = scandir($dir);
foreach ($image_files as &$file) {
$file = mb_convert_encoding($file, 'UTF-8', 'Windows-1251');
}
// ...
var_dump(in_array($find, $image_files));
将 UTF-8
替换为 PHP 文件编码,并将 Windows-1251
替换为您的文件系统编码。
问题在于将 ö
和 ü
等多字节字符存储到 PHP 文件中。
您可以尝试将字符串解释为多字节:
$img = utf8_encode('/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg');
编码,然后解码以使其更安全:
$img = html_entity_decode('/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg');
或反斜杠实体:
$img = "/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubeh36r-f34r-sommer.jpg";
我有一个代码可以 运行 遍历文件并获取所有图像。
$img = '/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/2018_07_DogOwner_VS_CatOwner_655x368_NL-500x281.jpg';
$dir = preg_replace('#[^/]*$#', '', $img);
$image_files = scandir($dir);
$image_name = @array_pop(explode('/', $img));
$find = $image_name;
var_dump(in_array($find, $image_files));
在这个例子中我运行只通过一张图片。此代码 returns 正确。问题是当我有一个图像时,例如德国标志 (hundezubehör-für-sommer.jpg)。
$img = '/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg';
这 returns 错误。知道为什么这不起作用吗?
已编辑:
我几天前问过这个问题:
尽管字符串字母表,in_array
函数仍然有效。我想问题的发生是因为你的 PHP 文件和文件系统使用不同的编码,因此 scandir
读取的值有另一种编码,因此它不同于代码中写入的 $img
值。
尝试转换 scandir
结果的编码,使其与 PHP 文件编码匹配。例如:
// ...
$image_files = scandir($dir);
foreach ($image_files as &$file) {
$file = mb_convert_encoding($file, 'UTF-8', 'Windows-1251');
}
// ...
var_dump(in_array($find, $image_files));
将 UTF-8
替换为 PHP 文件编码,并将 Windows-1251
替换为您的文件系统编码。
问题在于将 ö
和 ü
等多字节字符存储到 PHP 文件中。
您可以尝试将字符串解释为多字节:
$img = utf8_encode('/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg');
编码,然后解码以使其更安全:
$img = html_entity_decode('/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg');
或反斜杠实体:
$img = "/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubeh36r-f34r-sommer.jpg";