我使用PHP来检索文件夹中文件的名称: while(false!==($ entry = readdir($ handle)))
对于每个$ entry,我要检查一个MySQL数据库,是否存在带有该$ entry的记录。
它适用于不带特殊字符的普通字符串,但不适用于以下文件:AdigûzelElbinur21.03.2001.jpg,TruöngNgocMai13.09.2009.jpg,...
我的MySQL数据库,表和字段正在使用utf8_general_ci。我在一个视图中搜索,该视图创建了两个表的联合(全部为utf8_general_ci)。
据我所知,带有特殊字符的文件名采用UTF-8编码,我的PHP文件也是如此。
此脚本在PHP版本7.3.9的Centos 7服务器上运行。
我尝试检测字符串是否为UTF8并进行转换,但这没用。
这适用于普通文件名:
while (false !== ($entry = readdir($handle))) {
if($entry !=='.' && $entry !=='..' && $entry !== '__MACOSX'){
echo "<div class=\"bold\">$entry</div>";
$sqlentry = mysqli_real_escape_string($link, $entry);
$query = "select pointer from vwLeerlingenFotosNaarSmartschool where zoekstring = '$sqlentry'";
}
}
我还尝试将视图vwLeerlingenFotosNaarSmartschool中的数据加载到数组中
$query = "select distinct pointer from vwLeerlingenFotosNaarSmartschool";
$result = mysqli_query($link, $query);
$arr_pointer = array();
while($row = mysqli_fetch_assoc($result)){
$pointer = $row['pointer'];
$arr_pointer[$pointer] = $row['zoekstring'];
}
使用
搜索$ arr_pointer时var_dump(in_array($entry, $arr_pointer));
它也找不到字符串。
如何确保文件名使用正确的编码,可以在数据库(或数组)中找到。