【问题标题】:Special Characters in FPDF with PHP使用 PHP 的 FPDF 中的特殊字符
【发布时间】:2011-03-31 15:43:15
【问题描述】:

我有一个用户可以填写的 Web 表单,该表单的内容使用 FPDF 和 PHP 填充一个 PDF。当用户输入带有撇号的单词时,PDF 上会在其前面出现一个斜线。

同样,商标符号等特殊字符编码错误。

FPDF 常见问题解答说要使用:

$str = utf8_decode($str);

但我只是不确定如何将其应用于整个 PDF。我试图将其视为 HTML 页面,但这没有帮助。

有什么想法吗?

【问题讨论】:

    标签: php character fpdf


    【解决方案1】:

    通过执行以下操作来解决这个问题(pagesubtitle 是表单中文本字段的名称):

    $reportSubtitle = stripslashes($_POST['pagesubtitle']);
    $reportSubtitle = iconv('UTF-8', 'windows-1252', $reportSubtitle);
    

    然后打印出来:

    $pdf->Write (6, $reportSubtitle);
    

    这将删除撇号后面的任何不需要的斜线,并使用“iconv”功能打印特殊字符,例如 ™

    【讨论】:

      【解决方案2】:

      以上所有方法都对我不起作用,但我确实让它起作用了。

      我通过将每个奇怪的字符转换为它的 url 值来设法做到“野蛮方式”。然后简单地解码 url,瞧!

      function em($word) {
      
          $word = str_replace("@","%40",$word);
          $word = str_replace("`","%60",$word);
          $word = str_replace("¢","%A2",$word);
          $word = str_replace("£","%A3",$word);
          $word = str_replace("¥","%A5",$word);
          $word = str_replace("|","%A6",$word);
          $word = str_replace("«","%AB",$word);
          $word = str_replace("¬","%AC",$word);
          $word = str_replace("¯","%AD",$word);
          $word = str_replace("º","%B0",$word);
          $word = str_replace("±","%B1",$word);
          $word = str_replace("ª","%B2",$word);
          $word = str_replace("µ","%B5",$word);
          $word = str_replace("»","%BB",$word);
          $word = str_replace("¼","%BC",$word);
          $word = str_replace("½","%BD",$word);
          $word = str_replace("¿","%BF",$word);
          $word = str_replace("À","%C0",$word);
          $word = str_replace("Á","%C1",$word);
          $word = str_replace("Â","%C2",$word);
          $word = str_replace("Ã","%C3",$word);
          $word = str_replace("Ä","%C4",$word);
          $word = str_replace("Å","%C5",$word);
          $word = str_replace("Æ","%C6",$word);
          $word = str_replace("Ç","%C7",$word);
          $word = str_replace("È","%C8",$word);
          $word = str_replace("É","%C9",$word);
          $word = str_replace("Ê","%CA",$word);
          $word = str_replace("Ë","%CB",$word);
          $word = str_replace("Ì","%CC",$word);
          $word = str_replace("Í","%CD",$word);
          $word = str_replace("Î","%CE",$word);
          $word = str_replace("Ï","%CF",$word);
          $word = str_replace("Ð","%D0",$word);
          $word = str_replace("Ñ","%D1",$word);
          $word = str_replace("Ò","%D2",$word);
          $word = str_replace("Ó","%D3",$word);
          $word = str_replace("Ô","%D4",$word);
          $word = str_replace("Õ","%D5",$word);
          $word = str_replace("Ö","%D6",$word);
          $word = str_replace("Ø","%D8",$word);
          $word = str_replace("Ù","%D9",$word);
          $word = str_replace("Ú","%DA",$word);
          $word = str_replace("Û","%DB",$word);
          $word = str_replace("Ü","%DC",$word);
          $word = str_replace("Ý","%DD",$word);
          $word = str_replace("Þ","%DE",$word);
          $word = str_replace("ß","%DF",$word);
          $word = str_replace("à","%E0",$word);
          $word = str_replace("á","%E1",$word);
          $word = str_replace("â","%E2",$word);
          $word = str_replace("ã","%E3",$word);
          $word = str_replace("ä","%E4",$word);
          $word = str_replace("å","%E5",$word);
          $word = str_replace("æ","%E6",$word);
          $word = str_replace("ç","%E7",$word);
          $word = str_replace("è","%E8",$word);
          $word = str_replace("é","%E9",$word);
          $word = str_replace("ê","%EA",$word);
          $word = str_replace("ë","%EB",$word);
          $word = str_replace("ì","%EC",$word);
          $word = str_replace("í","%ED",$word);
          $word = str_replace("î","%EE",$word);
          $word = str_replace("ï","%EF",$word);
          $word = str_replace("ð","%F0",$word);
          $word = str_replace("ñ","%F1",$word);
          $word = str_replace("ò","%F2",$word);
          $word = str_replace("ó","%F3",$word);
          $word = str_replace("ô","%F4",$word);
          $word = str_replace("õ","%F5",$word);
          $word = str_replace("ö","%F6",$word);
          $word = str_replace("÷","%F7",$word);
          $word = str_replace("ø","%F8",$word);
          $word = str_replace("ù","%F9",$word);
          $word = str_replace("ú","%FA",$word);
          $word = str_replace("û","%FB",$word);
          $word = str_replace("ü","%FC",$word);
          $word = str_replace("ý","%FD",$word);
          $word = str_replace("þ","%FE",$word);
          $word = str_replace("ÿ","%FF",$word);
          return $word;
      }
      

      当然还有我调用函数

      $weirdword = "Días, Miércoles, Sábado,miércoles"; //Some spanish days
      $weirdword = em($weirdword);
      $weirdword = urldecode($weirdword);
      echo $weirdword;
      

      给出输出:

      Días, Miércoles, Sábado,miércoles

      【讨论】:

      • 你可以给str_replace数组作为参数。
      • 我意识到这是一个巨大的黑客攻击,但至少在 em 函数的末尾可能对 return urldecode($word); 更干净。无论如何,这在没有其他方法的情况下有效,所以一百万谢谢! :)
      • 酷,它有效 :).. 在 em 函数中返回 urldecode($word) 可能值得 :).. 非常感谢!
      • 这个问题的最佳解决方案!
      【解决方案3】:

      以上解决方案都不适合我,所以我解决了这样的问题:

      $this->AddFont('Arial','','arial.php');
      $this->SetFont('Arial','',12);
      $this->Cell(0,5,iconv("UTF-8", "CP1250//TRANSLIT", $string),0,1,'L');
      

      在尝试上述几行之前,请执行以下操作:

      从 c:/Windows/Fonts/Arial.ttf 复制到 FPDF 的 /tutorial 文件夹中。

      编辑makefont.php的内容

      require('../makefont/makefont.php');
      MakeFont('arial.ttf','cp1250');
      

      执行makefont.php

      将以下文件复制到 FPDF 的 /font 文件夹: 宋体.php arial.ttf arial.z

      最后,定义“字体文件夹”。打开 fpdf.php(主库文件)并添加:

      define('FPDF_FONTPATH','font');
      

      PDF 适用于所有特殊字符,我相信这是 FPDF 最初使用的 Arial 字体本身的问题。如果它们支持您的字符,它也应该与其他字体一起使用。祝你好运!

      【讨论】:

      • 我知道这已经很老了,但仍然 - 非常感谢!这似乎是解决这个问题的正确方法。我还在使用cp1250 为FPDF 创建(或转换)ttf 字体,现在每个字符都可以正确显示。不错!
      【解决方案4】:

      以上都没有解决我的问题。我通过以下方式解决了它:

      setlocale(LC_CTYPE, 'en_US');
      
      $value = iconv('UTF-8', 'ASCII//TRANSLIT', $value);
      $fpdf->Cell(140, 6, $value, 1);
      

      希望你能有所帮助。

      参考:Link

      【讨论】:

      • 真的,太棒了。这就是我搜索了 3 个小时的内容。
      【解决方案5】:

      以下对我有用(使用 FPDF):


      function em_jaz($word) {
      $word = str_replace('+', ' ', $word);
      $word = str_replace("%C3%A9","%E9",$word);          /* é */
      $word = str_replace("%C3%A8","%E8",$word);          /* è */
      $word = str_replace("%C3%AE","%EE",$word);          /* î */
      $word = str_replace("%26rsquo%3B","%27",$word);     /* ' */
      $word = str_replace("%C3%89","%C9",$word);          /* É */
      $word = str_replace("%C3%8A","%CA",$word);          /* Ê */ 
      $word = str_replace("%C3%8B","%CB",$word);          /* Ë */
      $word = str_replace("%C3%8C","%CC",$word);          /* Ì */
      $word = str_replace("%C3%8D","%CD",$word);          /* Í */
      $word = str_replace("%C3%8E","%CE",$word);          /* Î */
      $word = str_replace("%C3%8F","%CF",$word);          /* Ï */
      $word = str_replace("%C3%90","%D0",$word);          /* Ð */
      $word = str_replace("%C3%91","%D1",$word);          /* Ñ */
      $word = str_replace("%C3%92","%D2",$word);          /* Ò */
      $word = str_replace("%C3%93","%D3",$word);          /* Ó */
      $word = str_replace("%C3%94","%D4",$word);          /* Ô */
      $word = str_replace("%C3%95","%D5",$word);          /* Õ */
      $word = str_replace("%C3%96","%D6",$word);          /* Ö */
      $word = str_replace("%C3%98","%D8",$word);          /* Ø */                 
      $word = str_replace("%C3%99","%D9",$word);          /* Ù */
      $word = str_replace("%C3%9A","%DA",$word);          /* Ú */
      $word = str_replace("%C3%9B","%DB",$word);          /* Û */
      $word = str_replace("%C3%9C","%DC",$word);          /* Ü */
      $word = str_replace("%C3%9D","%DD",$word);          /* Ý */
      $word = str_replace("%C3%9E","%DE",$word);          /* Þ */
      $word = str_replace("%C3%9F","%DF",$word);          /* ß */
      $word = str_replace("%C3%A0","%E0",$word);          /* à */
      $word = str_replace("%C3%A1","%E1",$word);          /* á */
      $word = str_replace("%C3%A2","%E2",$word);          /* â */
      $word = str_replace("%C3%A3","%E3",$word);          /* ã */
      $word = str_replace("%C3%A4","%E4",$word);          /* ä */
      $word = str_replace("%C3%A5","%E5",$word);          /* å */
      $word = str_replace("%C3%A6","%E6",$word);          /* æ */
      $word = str_replace("%C3%A7","%E7",$word);          /* ç */
      $word = str_replace("%C3%AA","%EA",$word);          /* ê */
      $word = str_replace("%C3%AB","%EB",$word);          /* ë */
      $word = str_replace("%C3%AC","%EC",$word);          /* ì */
      $word = str_replace("%C3%AD","%ED",$word);          /* í */
      $word = str_replace("%C3%AF","%EF",$word);          /* ï */
      $word = str_replace("%C3%B0","%F0",$word);          /* ð */
      $word = str_replace("%C3%B1","%F1",$word);          /* ñ */
      $word = str_replace("%C3%B2","%F2",$word);          /* ò */
      $word = str_replace("%C3%B3","%F3",$word);          /* ó */
      $word = str_replace("%C3%B4","%F4",$word);          /* ô */
      $word = str_replace("%C3%B5","%F5",$word);          /* õ */
      $word = str_replace("%C3%B6","%F6",$word);          /* ö */
      $word = str_replace("%C3%B7","%F7",$word);          /* ÷ */
      $word = str_replace("%C3%B8","%F8",$word);          /* ø */
      $word = str_replace("%C3%B9","%F9",$word);          /* ù */
      $word = str_replace("%C3%BA","%FA",$word);          /* ú */
      $word = str_replace("%C3%BB","%FB",$word);          /* û */
      $word = str_replace("%C3%BC","%FC",$word);          /* ü */
      $word = str_replace("%C3%BD","%FD",$word);          /* ý */
      $word = str_replace("%C3%BE","%FE",$word);          /* þ */
      $word = str_replace("%C3%BF","%FF",$word);          /* ÿ */ 
      $word = str_replace("%40","%40",$word);             /* @ */
      $word = str_replace("%60","%60",$word);             /* ` */
      $word = str_replace("%C2%A2","%A2",$word);          /* ¢ */
      $word = str_replace("%C2%A3","%A3",$word);          /* £ */
      $word = str_replace("%C2%A5","%A5",$word);          /* ¥ */
      $word = str_replace("%7C","%A6",$word);             /* | */
      $word = str_replace("%C2%AB","%AB",$word);          /* « */
      $word = str_replace("%C2%AC","%AC",$word);          /* ¬ */
      $word = str_replace("%C2%AF","%AD",$word);          /* ¯ */
      $word = str_replace("%C2%BA","%B0",$word);          /* º */
      $word = str_replace("%C2%B1","%B1",$word);          /* ± */
      $word = str_replace("%C2%AA","%B2",$word);          /* ª */
      $word = str_replace("%C2%B5","%B5",$word);          /* µ */
      $word = str_replace("%C2%BB","%BB",$word);          /* » */
      $word = str_replace("%C2%BC","%BC",$word);          /* ¼ */
      $word = str_replace("%C2%BD","%BD",$word);          /* ½ */
      $word = str_replace("%C2%BF","%BF",$word);          /* ¿ */
      $word = str_replace("%C3%80","%C0",$word);          /* À */
      $word = str_replace("%C3%81","%C1",$word);          /* Á */
      $word = str_replace("%C3%82","%C2",$word);          /* Â */
      $word = str_replace("%C3%83","%C3",$word);          /* Ã */
      $word = str_replace("%C3%84","%C4",$word);          /* Ä */
      $word = str_replace("%C3%85","%C5",$word);          /* Å */
      $word = str_replace("%C3%86","%C6",$word);          /* Æ */
      $word = str_replace("%C3%87","%C7",$word);          /* Ç */
      $word = str_replace("%C3%88","%C8",$word);          `/`* È */
      return $word;
      }
      

      $content = urlencode($content);

      $content = urldecode($pdf->em_jaz($content));

      【讨论】:

      • 欢迎来到 SO!在提供代码作为答案时,解释您的代码如何解决 OP 的问题会很有帮助:)
      【解决方案6】:

      此类是 FPDF 的修改版本,增加了 UTF-8 支持。 此外,它仅嵌入字体的必要部分 在文档中使用,使文件大小比如果 整个字体被嵌入。这些功能最初是开发的 用于 mPDF 项目。

      http://fpdf.org/en/script/script92.php

      【讨论】:

        【解决方案7】:

        我用这个$str = preg_replace('/[^A-Za-z0-9_-]/','', $str);对我来说已经足够了,我消除了非字母数字字符

        【讨论】:

          【解决方案8】:

          这是为我做的: iconv("UTF-8", "ISO-8859-1//TRANSLIT//IGNORE", your-text-var-here)

          【讨论】:

            【解决方案9】:

            假设您的特殊字符是“°C”,您必须以这种方式对其进行编码

            > $pdf->Cell(X(int),Y(int),iconv("UTF-8", "CP1250//TRANSLIT", '°C'));
            

            【讨论】:

              【解决方案10】:

              试试这个简单的函数:utf8_encode($txt)。它对我有用。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-05-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-10-12
                • 1970-01-01
                相关资源
                最近更新 更多