Special Characters in FPDF with PHP

青春壹個敷衍的年華 提交于 2019-11-27 19:22:16

Figured this out by doing the following (pagesubtitle is the name of the text field in the form):

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

Then print it out:

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

This will remove any unwanted slashes following apostrophes, as well as use the 'iconv' function to print special characters such as ™

Oscar Bout

All of the above did not work for me, but I did get it to work.

I managed to do it "the barbarian way" by just translating every weird character to its url value. Then simply decode the url and voila!

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;
}

And of course me calling the function

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

Giving output:

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

None of above had solved my problem. I had solved it by the following way:

setlocale(LC_CTYPE, 'en_US');

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

Hope you will be helpful.

Reference: Link

none of above solutions worked for me, so I solved the problem like this:

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

Before trying the above lines, do the following:

Copy from c:/Windows/Fonts/Arial.ttf to the /tutorial folder of FPDF.

Edit the content of makefont.php

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

Execute makefont.php

Copy the following files to the /font folder of FPDF: arial.php arial.ttf arial.z

Finally, define the "font folder". Open fpdf.php (main library file) and add:

define('FPDF_FONTPATH','font');

The PDF works for me with all special characters, I believe it was the problem in the Arial font itself, which FPDF originally uses. It should work with other fonts aswell, if they support your characters. Good luck!

This class is a modified version of FPDF that adds UTF-8 support. Moreover, it embeds only the necessary parts of the fonts that are used in the document, making the file size much smaller than if the whole fonts were embedded. These features were originally developed for the mPDF project.

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

Below works for me (Using 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));

Sounds like you have magic_quotes enabled. See the link to disable magic_quotes.

Sergio Lopez Loya

Try this simple function: utf8_encode($txt). It works for me.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!