与file_put_contents()一起存储的Textfile的Charset被错误解释

时间:2015-07-21 08:39:24

标签: php utf-8 character-encoding

要准备下载某些HTML contenteditable,作为纯文本文件,我会执行以下操作:

  1. 通过Ajax将继承其他html元素的html contenteditable发送到服务器端脚本prepareDownload.php

  2. 我在那里创建了一个新的DOMDocument:$doc = new DOMDocument();

  3. 然后我做:$doc->loadHTML('<?xml encoding="UTF-8">' . $_POST["data"]);

  4. 然后我在某些元素中查找文本内容并将其汇总到$plainText
  5. 最后,我使用$plainText
  6. file_put_contents($txtFile, $plainText, LOCK_EX);写入磁盘

    到目前为止它的工作原理......但是当我打开文本文件时,像德语Ä这样的特殊字符就是一团糟。

    要找出可能产生问题的位置,我在php脚本的几个阶段放置一些print_r()命令,并查看浏览器控制台中的内容。 在我用$plainTextto disk file_put_contents()之前,一切都很完美。然后查看存储的文本文件,字符很乱。

    现在我假设file_put_contents()误解了给定的字符集。但是如何告诉file_put_contents()它应该将它解释(不编码)为UTF-8?

    修改
    作为一个测试,以找到更多我替换了explizit声明:

    $doc->loadHTML('<?xml encoding="UTF-8">' . $_POST["data"])
    

    $doc->loadHTML($_POST["data"])
    

    文件中的字符ä看起来仍然很好,但不同。 hexdump现在看起来像这样:

    0220: 20 76 69 65 6C 2C 20 65 72 7A C3 A4 68 6C 74 20 viel, erz..hlt

    现在ä有两个点(两个字节),并且是十六进制C3 A4。这是什么编码?

0 个答案:

没有答案