要准备下载某些HTML contenteditable
,作为纯文本文件,我会执行以下操作:
通过Ajax将继承其他html元素的html contenteditable
发送到服务器端脚本prepareDownload.php
。
我在那里创建了一个新的DOMDocument:$doc = new DOMDocument();
然后我做:$doc->loadHTML('<?xml encoding="UTF-8">' . $_POST["data"]);
$plainText
$plainText
file_put_contents($txtFile, $plainText, LOCK_EX);
写入磁盘
醇>
到目前为止它的工作原理......但是当我打开文本文件时,像德语Ä
这样的特殊字符就是一团糟。
要找出可能产生问题的位置,我在php脚本的几个阶段放置一些print_r()
命令,并查看浏览器控制台中的内容。
在我用$plainText
写to 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
。这是什么编码?