PHP:如何使用unicode字符将文件写入磁盘

时间:2015-02-12 00:02:40

标签: javascript php unicode filenames

我需要用特殊的ISO-8859-15字符写出一个文件到磁盘。出于我自己的测试目的,我使用了:

- ©®±àáâãäåæÒÓÔÕÖ¼½¾§μçðþú-.JPG

...但是当使用此名称将文件写入磁盘时,em-dash,en-dash以及1 / 2,1 / 4和3/4分数被替换为垃圾,而其他字符在文件名中写得正确。为什么有些人而不是其他人???

这是一个非常简单的PHP脚本,用于在其名称中写出仅带有版权符号和em-dashes的文件。当我运行它时,字符串被正确写入文件,但文件名的em-dashes被替换为garbage:

<?php
    // First, create a text file with the em-dash and the copyright symbol, then put the file prefix into the file:
    $filename1 = "000—©—©.txt";
    $content1 = "000—©—©";
    file_put_contents($filename1, $content1);
?>

使用PHP(或Javascript)执行此操作的最有效和最优雅的方法是什么?我只针对ISO-8859-15字符集。

非常感谢! 汤姆

1 个答案:

答案 0 :(得分:3)

我找到了自己的答案。首先,我需要WINDOWS-1252编码。其次,我需要做的就是使用inconv(),从'UTF-8'转换为'WINDOWS-1252',如下所示:

<?php
    // First, create a text file with the em-dash and the copyright symbol, then put the file prefix into the file:
    $filename1 = "000—©—©.txt";
    $content1 = "000—©—©";

    // Judicious use of iconv() does the trick:
    $filename1 = iconv('UTF-8', 'WINDOWS-1252', $filename1);
    file_put_contents($filename1, $content1);
?>

我唯一挥之不去的问题,只要我在我的本地Windows机器上的XAMPP上测试这个问题,WINDOWS-1252编码是否可以在主要托管服务(GoDaddy等)的实际服务器上运行。如果没有,是否有一种不同的编码,支持WINDOWS-1252中包含的所有内容,但更适合非XAMPP本地主机服务器?

iconv here支持完整的编码列表。有几个与WINDOWS-1252在同一条线上;这是否意味着它们可以互换?

非常感谢, 汤姆