【发布时间】:2018-06-17 22:51:08
【问题描述】:
我正在尝试创建一个包含扩展 ASCII 字符的文档。对于来自客户端的文本,以下工作:
// Convert from UTF-8 to ISO-8859-1 - Deal with Spanish characters
setlocale(LC_ALL, 'en_US.UTF-8');
foreach ($_POST as $key => $value){
$post[$key] = iconv("UTF-8", "ISO-8859-1", $value);
}
$pdf->Cell(0, 0, $post["Name"], 0, 1);
但是,我无法让 PHP 文件中的文本正常工作。例如:
$name = "José";
我不知道变量使用什么编码。结果,我无法将其转换为 ISO-8859-1。 é 被破坏了。
编辑: 我正在重写一个生成 PDF 文档的程序(有些是西班牙语)。如果我从现有 PDF 中复制文本,我会得到以下信息:(在 PDF 文档和 IDE 中看起来很正常,但无法使用 FPDF 使用 CP1252 或 ISO-8859-1 字体打印)。
$Name = "José" // Jos\x65\xcc\x81 - I have no idea what encoding is used for the é
将扩展字符改为UTF-8即可解决问题:
$Name = "José" // Jos\xC3\xA9 - UTF-8
- 有谁知道我从现有 PDF 中复制了哪种编码?
- 有没有办法将其转换为 UTF-8?
- 用户可以在浏览器中输入这些内容吗?
当我将 UTF-8 编码字符转换为 ISO-8859-1 以输出到 FPDF 时,PDF 包含 é 的三个字符编码版本。
第二次编辑: Unicode equivalence from Wikipedia
Unicode 提供了两个概念,规范等价和 兼容性。规范定义的代码点序列 假定等效项具有相同的外观和含义 打印或显示。例如,代码点 U+006E(拉丁 小写“n”)后跟 U+0303(组合波浪号“◌̃”)是 由 Unicode 定义为规范地等效于单个代码 点 U+00F1(西班牙字母表的小写字母“ñ”)。 因此,这些序列应该以相同的方式显示, 应通过应用程序以相同的方式处理,例如 按字母顺序排列名称或搜索,并且可以替换每个 其他。
解释@smith 的评论,我只需要获取 TCPDF 或可以正确处理 UTF-8 的东西,这是很长的路要走。应该注意的是,我在 PHP 的 iconv 中遇到了错误,所以我不完全确定是否可以通过切换到 TCPDF 来消除它。
【问题讨论】:
-
我使用 TCPDF 的原因之一是它出色的 utf-8 支持。
-
@smith 你能告诉我一些代码的例子,这些代码将带有扩展 ASCII 字符的局部变量发送到生成 pdf 文档的函数吗?
-
我建议你改用更好的 pdf 生成库 TCPDF。 tcpdf.org
-
@smith 感谢您的指点。我认为问题出在 PHP 而不是 FPDF。结果证明是正确的。 TCPDF 似乎是一个更好的包,有更好的例子。我从他们的示例中复制了文本,它起作用了!显然我使用的 é 不是 UTF-8。
-
@smith 你能检查一下三字节编码是否适用于 TCPDF?
标签: php character-encoding fpdf extended-ascii