簡體   English   中英

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)); 

在此示例中,我僅運行一張圖像。 此代碼返回true。 問題是當我有一個帶有德國標志的圖像時(hundezubehör-für-sommer.jpg)。

$img = '/srv/www/wordpress-default/public_html/wp-content/uploads/2018/07/hundezubehör-für-sommer.jpg';

這將返回false。 任何想法為什么這不起作用?

編輯:我幾天前問過這個問題: 如何找到具有不同命名的同一圖像的最短名稱(字符串) 解決方案在這里: 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)); 

用PHP文件編碼替換UTF-8 ,並用文件系統編碼替換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/hundezubeh\303\266r-f\303\274r-sommer.jpg";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM