【发布时间】:2019-05-14 07:37:08
【问题描述】:
我正在尝试在 Windows 中创建一些具有 unicode 名称的目录。名称在浏览器中正确显示,但是当创建目录时,它会被转换为垃圾文本。
我尝试过去除特殊字符的编码转换。
$myfile = fopen("unicode.csv", "r") or die("Unable to open file!");
$lines = file("unicode.csv", FILE_IGNORE_NEW_LINES);
echo '<table border="1">';
foreach($lines as $k=>$v){
$parts = preg_split('/[\t]/', $v);
echo '<tr>';
foreach($parts as $key=>$val){
if($key==0){
$dir = str_replace("/", "", $val);
$dir = str_replace("\\", "", $dir);
$encode = mb_detect_encoding($dir, mb_detect_order(), false);
$dir = mb_convert_encoding($dir , 'UTF-8' , 'UTF-8');
echo '<td>'.$dir.'</td><td>'.$encode.'</td>';
$result = mkdir ($dir, "0777");
}
echo '<td>'.$val.'</td>';
}
echo '</tr>';
}
【问题讨论】:
-
窗口是否支持印地语?
-
@developerCK 是的。我可以从 WIndows Explorer 在 Hind 中创建文件夹。
-
我认为在 NTFS 格式的驱动器上,您应该使用 UTF-16 而不是 UTF-8,至少根据stackoverflow.com/questions/2050973/…
-
@04FS 仍然无法正常工作。警告:mkdir() 期望参数 1 是有效路径,字符串给定 Converted Text : �� 7 M * M 0 > 。 0 @ B ( ? / 0 9 > 8 M B 2 > 5 ( @ * 0 ? 7 M 7 & + H > , > & 7 M
-
根据您的结果,PHP
mkdir似乎没有从 UTF-8 转码为本机 Windows UTF-16LE 以调用 [W]ide-characterCreateDirectoryW。它可能只是调用 Cmkdir。这天真地将字节传递给CreateDirectoryA,后者使用系统 [A]NSI 编码(例如代码页 1252)解码 UTF-8 名称。从 Windows 10 开始,我们可以在系统区域设置中将 [A]NSI 设置为 UTF-8。此更改需要重新启动。
标签: php windows utf-8 character-encoding