【问题标题】:Unable to create directory in Windows using PHP and UTF-8无法使用 PHP 和 UTF-8 在 Windows 中创建目录
【发布时间】: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>';
}

预期结果是目录名称应该是 UTF-8 可读的。

原来是垃圾文字。

【问题讨论】:

  • 窗口是否支持印地语?
  • @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-character CreateDirectoryW。它可能只是调用 Cmkdir。这天真地将字节传递给CreateDirectoryA,后者使用系统 [A]NSI 编码(例如代码页 1252)解码 UTF-8 名称。从 Windows 10 开始,我们可以在系统区域设置中将 [A]NSI 设置为 UTF-8。此更改需要重新启动。

标签: php windows utf-8 character-encoding


【解决方案1】:

感谢@eryksun:

根据您的结果,PHP mkdir 似乎没有从 UTF-8 转码为本机 Windows UTF-16LE 以调用 [W]ide-character CreateDirectoryW。它可能只是调用 C mkdir。这天真地将字节传递给 CreateDirectoryA,后者使用系统 [A]NSI 编码(例如代码页 1252)解码 UTF-8 名称。从 Windows 10 开始,我们可以在系统区域设置中将 [A]NSI 设置为 UTF-8。此更改需要重新启动。

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 2014-06-02
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多