php - 从 PHP 以 UTF-8 编码

标签 php xml encoding utf-8

我不太擅长编码,但我什至对这里的基础知识都感到失望。

我正在尝试创建一个被识别为 UTF-8 的文件

header("Content-Type: text/plain; charset=utf-8");
header("Content-disposition: attachment; filename=test.txt");
echo "test";
exit();

也试过

header("Content-Type: text/plain; charset=utf-8");
header("Content-disposition: attachment; filename=test.txt");
echo utf8_encode("test");
exit();

然后我用 Notepad++ 打开文件,它说它的当前编码是 ANSI 而不是 UTF-8,我错过了什么我应该如何输出这个文件。

我最终会为 Affiliate Window 程序输出产品的 XML 文件。 另外,如果它有帮助,我的网络服务器是 Centos、Apache2、PHP 5.2.8。

在此先感谢您的帮助!

最佳答案

正如 Filip 所说,编码不是文件的固有属性;这是隐含的。这意味着除非您知道要解释的文件的编码是什么,否则无法确定它。你能做的最好的事情就是猜测。这大概是 Notepad++ 等程序所做的。由于您发送的实际数据可以用许多不同的编码进行解释,因此它只会选择最喜欢的候选者。对于 Notepad++,这似乎是 ANSI(这本身就是一个相当不准确的分类),而其他程序可能默认为其他东西。

之所以必须在 HTTP header 中指定字符集,正是因为文件本身不包含此信息,因此需要通知浏览器。将文件保存到磁盘后,此信息将不可用。

如果您要提供的文件是 XML 文档,您可以选择将编码信息放入实际文档中。这样它在文件保存到磁盘后被保留。例如。如果您使用的是 utf-8,则应将其放在文档的顶部:

<?xml version="1.0" encoding="utf-8" ?>

请注意,除了获取有关字符集的元信息外,您还需要确保您提供的数据实际上是 utf-8 编码的。这几乎是相同的场景:您需要隐式地知道您的数据采用什么编码。函数 utf8_encode 是(尽管名称)明确用于将 iso-8859-1 转换为 utf-8。因此,如果您在已经使用 utf-8 编码的数据上使用它,您将得到双重编码,结果是乱码数据。

字符集本身并没有那么复杂。问题是,如果你不小心把事情弄清楚,你就会把事情搞砸。无论何时你有一个字符串,你都应该绝对确定你知道它采用的是哪种编码。否则它就不是一个字符串——它只是一团二进制数据。

关于php - 从 PHP 以 UTF-8 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327202/

相关文章:

php - 在 Yii2 中保存之前

PHP fopen 无法打开文件但仍写入文件

c# - 如何让 ASP.NET Core 返回 XML 结果?

python - 使用 ElementTree 强制对不良 XML 文件进行编码

android - 如何将图像转换为base64字符串

php - AWS Elastic Beanstalk 更改挂载目录的权限

python - 使用 lxml 将长 XML 标签拆分为多行

Java UML 可编辑组件/库

javascript - 当涉及重音等时,如何从 javascript 以 GET 请求形式重现 url 编码?

php - 无法从复选框中获取值并用于另一个 php 文件