FPDF中的特殊字符与PHP

Car*_*son 28 php character fpdf

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

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

FPDF常见问题解答说使用:

$str = utf8_decode($str);
Run Code Online (Sandbox Code Playgroud)

但我只是不确定如何将其应用于整个PDF.我试着把它想象成一个HTML页面,但这没有帮助.

有任何想法吗?

Car*_*son 71

通过执行以下操作来计算出来(pagesubtitle是表单中文本字段的名称):

$reportSubtitle = stripslashes($_POST['pagesubtitle']);
$reportSubtitle = iconv('UTF-8', 'windows-1252', $reportSubtitle);
Run Code Online (Sandbox Code Playgroud)

然后打印出来:

$pdf->Write (6, $reportSubtitle);
Run Code Online (Sandbox Code Playgroud)

这将删除撇号后的任何不需要的斜杠,以及使用'iconv'功能打印特殊字符,如™


小智 23

所有这些都不适合我,但我确实让它工作.

我设法通过将每个奇怪的角色转换为其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;
}
Run Code Online (Sandbox Code Playgroud)

当然我要调用这个功能

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

给出输出:

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

  • 您可以将str_replace数组作为参数. (2认同)

tom*_*lin 9

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

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

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

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

编辑makefont.php的内容

require('../makefont/makefont.php');
MakeFont('arial.ttf','cp1250');
Run Code Online (Sandbox Code Playgroud)

执行 makefont.php

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

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

define('FPDF_FONTPATH','font');
Run Code Online (Sandbox Code Playgroud)

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


MH2*_*2K9 6

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

setlocale(LC_CTYPE, 'en_US');

$value = iconv('UTF-8', 'ASCII//TRANSLIT', $value);
$fpdf->Cell(140, 6, $value, 1);
Run Code Online (Sandbox Code Playgroud)

希望你会有所帮助.

参考: 链接

  • 非常好.这就是我在寻找3个小时. (3认同)