gpt4 book ai didi

php - 将 MySQL 文本字段编码为 UTF-8 文本文件 - 特殊字符问题

转载 作者:行者123 更新时间:2023-11-29 01:12:30 27 4
gpt4 key购买 nike

我正在编写一个 php 脚本来将 MySQL 数据库行导出到一个 .txt 文件中,该文件的格式适用于 Adob​​e InDesign 的内部标记。

导出工作,但当我遇到像 é 或变音符号这样的特殊字符时,我会得到奇怪的符号(例如 Chloë Hanslip 而不是 Chloë Hanslip)。我需要一种更好的方法,而不是对每个可能的怪异字符进行搜索和替换。

我已经检查过,当文本到达数据库时,它已正确保存 - 在数据库中我看到了特殊字符。我的导出代码基本上运行一些正则表达式以放入 InDesign 代码标签中,而我只剩下奇怪的符号。如果我只是将文本输出到浏览器(而不是提示下载文本文件),它会正确显示。当我保存文件时,我使用此代码:

header("Content-disposition: attachment; filename=test.txt");

header("Content-Type: text/plain; charset=utf-8");

我尝试了 utf8_encode()iconv() 的各种组合,但均无济于事。任何人都可以在这里指出正确的方向吗?

最佳答案

InDesign 将无法使用 header 中指定的任何编码。 (它甚至看不到它,因为当你在 Windows 中保存到光盘时它不会被保留。)相反,你必须在文件开头用它自己的特殊标记明确地告诉它编码,例如:

<ANSI-WIN>

不幸的是,它does not use standard encoding names并且 InDesign 理解的标签根本不对应于 UTF-8 编码。您可以使用的唯一编码标签允许您包含您喜欢的任何字符:

<UNICODE-WIN>

对应于 UTF-16(带有 BOM 的小端),带有 Windows CRLF 行结尾。 (唯一的其他行结束选项是 MAC,您根本不需要它,因为它是老式的 OSX 之前的 Mac,行结束字符是 CR。)

因此,给定一个包含 UTF-8 字节序列的 UTF-8 字符串 $s,您已经从数据库中提取出来,并使用纯 (Unix-Linux-OSX-web-style) LF 换行符,您可以这样写:

$s= "<UNICODE-WIN>\r\n".str_replace("\n", "\r\n", $s);
echo iconv('UTF-8', 'UTF-16', $s);

(确保不在前后输出任何空格,因为它会破坏 UTF-16 编码。

关于php - 将 MySQL 文本字段编码为 UTF-8 文本文件 - 特殊字符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2675440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com