php - 使用正确的编码读取文件

标签 php encoding

我有一个 txt 文件,如果我用记事本或 scite 等标准文本编辑器打开,我可以读取如下字符串:

Artist1 – Title 1
Artist2 – Title 2

然后我用我的 PHP 脚本打开它并阅读以下行:

$tracklistFile_name=time().rand(1, 1000).".".pathinfo($_FILES['tracklistFile']['name'], PATHINFO_EXTENSION);
if(((pathinfo($tracklistFile_name, PATHINFO_EXTENSION)=='txt')) && (move_uploaded_file($_FILES['tracklistFile']['tmp_name'], 'import/'.$tracklistFile_name))) {
    $fileArray=file('import/'.$tracklistFile_name, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $fileArray=array_values(array_filter($fileArray, "trim"));

    for($i=0; $i<sizeof($fileArray); $i++) {
        echo $fileArray[$i]."<br />";
    }
}

然后...哇...我得到了这个结果:

Artist1 � Title1 
Artist2 � Title2 

???那些符号是什么?我认为编码失败。 符号错误到我无法将它们插入数据库,mysql_real_escape_string() 也无法插入。事实上,当我尝试插入它们时出现此错误:

Incorrect string value: '\x96 Titl...' for column 'atl' at row 1

我该如何解决这个问题?有什么建议吗?

编辑

尝试在插入/添加这些字符串之前添加 utf8_encode() :现在插入不会失败,但结果是:

Artist1  Title1 
Artist2  Title2

所以我丢失了信息。为什么?

最佳答案

你应该阅读 Joel Spolsky's article on UTF-8 and encoding .

您的问题几乎肯定源于编码不匹配,您的首要工作是找出发生这种不匹配的位置,您的问题可能出在很多不同的地方。

1) 您的 php 代码可能正在使用不正确的编码读取输入(如果您尝试读取 iso-8859,但源文件是以其他方式编码的)

2) 您的 php 代码可能使用不正确的编码写入输出

3) 无论您使用什么来读取输出(您的浏览器)都可以设置为与您正在写入的字节不同的编码。

一旦你找出 3 个地方中的哪一个导致了你的问题,你就可以通过了解你的源编码是什么来弄清楚如何解决它,以及如何使用该源编码而不是另一种编码(你的系统可能已设置为默认值)。

编辑:不太了解 php,看起来你可以使用 mb_detect_encoding可能还有mb-convert-encoding .

关于php - 使用正确的编码读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796266/

相关文章:

emacs - emacs中各种类型的 'utf-8'有什么区别

python - 关于python编码的问题

java - RGB 24 位到 RGB 8 位位移

php - 检查字符串是否包含数组中的单词

php - 为什么我使用 Atom 从 PHP 调试中得到 "New session rejected"

php - 使用 php/html 显示的 mysql blob 图像

java - 扫描仪和文本中的字母 "Ł"出现问题 - JAVA

具有屏幕宽度条件的 PHP

php - 使用从数组中提取的 ID 向用户发送电子邮件

java - 最新的 Base 64 和 url 编码库