【问题标题】:weird characters in my generated PDF我生成的 PDF 中的奇怪字符
【发布时间】:2010-05-20 07:00:20
【问题描述】:

我的 PDF 中出现了 ???????????????? 字符,我已经删除了 \r\n \r \n \t,修剪了所有内容,解码了 html 实体并删除了标签。没有什么帮助。数据来自 MySQL 数据库。

任何帮助将不胜感激。

【问题讨论】:

  • 数据在 MySQL 中是什么样子的?
  • MySQL 数据库中使用的编码是什么,您是如何访问数据的,以及您是如何创建 PDF 的?
  • MySQL 数据有一堆制表符和空格,我希望这些制表符和空格
  • @Matthew - mysql utf-8 编码,使用 php mysql_query 访问,使用 fpdf 库 (fpdf.org) 生成 pdf
  • @gAMB 不要在闲置 20 分钟后提出您的问题。你可以说这个时间无论如何都已经死了(相对而言)。如果 12 小时或一天后您仍然没有任何答案,请尝试实际修改您的问题,以包括您尝试过的其他内容以及您正在使用的更多规范

标签: php mysql pdf string


【解决方案1】:

在添加到 pdf 之前检查字符串编码(使用 mb_detect_encoding),它是 unicode 字符串吗? MySQL db 中的数据可以是 unicode,但您的 db 连接可以使用其他编码。

【讨论】:

  • 有趣。 MySQL 数据库是 utf-8。如果是这种情况,我该如何更改我的数据库连接的编码?
  • 要设置连接编码,你应该在 mysql_connect 之后执行下一个查询 mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'")。如果您的数据库排序规则不是 utf8_general_ci - 设置需要的排序规则。如果您有权访问 my.cnf,则可以向其中添加此查询:init-connect="SET NAMES 'utf8' COLLATE 'utf8_general_ci'"。更多信息:dev.mysql.com/doc/refman/5.5/en/charset-connection.html
【解决方案2】:

您是否尝试过使用 utf8_decode()? http://php.net/manual/en/function.utf8-decode.php

【讨论】:

    【解决方案3】:

    您可能正在使用不可用的字体。

    【讨论】:

    • 文字显示为 Hello ? There
    【解决方案4】:

    尝试这样的方法来确定它的数值并替换它:

    $str = 'Hello ? World';
    echo str_replace(chr(ord('?')), '[removed]', $str);
    

    输出:

    Hello [removed] World
    

    【讨论】:

      【解决方案5】:

      你试过了吗

      $string = "testContainingSpecialCharsäöüöüäüß";
      $pdf->Cell(0,0,$string);
      

      应该显示什么字符而不是那些 ?? 东西?

      【讨论】:

        【解决方案6】:

        FPDF 不支持 unicode 字符,因此这可能是您的问题的原因。您可以在 http://acko.net/node/56 尝试扩展,或者您可以切换到另一个 PDF 生成器库(我推荐 TCPDF)。

        如果您想坚持使用 FPDF,也可以尝试使用 iconv 将文本从 UTF-8 转换为受支持的字符集(即$str = iconv('UTF-8', 'windows-1252', $str);)。

        【讨论】:

        • 我们实际上使用的是 FPDF 扩展,UFPDF 支持 unicode
        【解决方案7】:

        看起来像是从 Microsoft Word 复制/粘贴文本时发生的结果。 PDF 文件是否包含来自 MS Word 文档的文本?那可能是你的问题。 PHP.net 网站上有一些有趣的 cmets 用于在 PHP 中转换和剥离这些字符:http://www.php.net/manual/en/function.strtr.php#39383

        我只是假设它是您的 PDF 文件中的 MS Word 字符。

        【讨论】:

        • 不是,是网页爬取的数据,字符显示的数据只有制表符和空格。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-20
        • 2014-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多