[英]Special Characters in FPDF with PHP
我有一個 web 表單,用戶可以填寫該表單,內容用 FPDF 填充 PDF 和 PHP。當用戶輸入帶有撇號的單詞時,斜線出現在 PDF 之前。
同樣,商標符號等特殊字符編碼錯誤。
FPDF 常見問題解答說使用:
$str = utf8_decode($str);
但我只是不確定如何將其應用於整個 PDF。我試圖將其視為一個 HTML 頁面,但這無濟於事。
有任何想法嗎?
通過執行以下操作來解決這個問題(pagesubtitle 是表單中文本字段的名稱):
$reportSubtitle = stripslashes($_POST['pagesubtitle']);
$reportSubtitle = iconv('UTF-8', 'windows-1252', $reportSubtitle);
然后打印出來:
$pdf->Write (6, $reportSubtitle);
這將刪除撇號后面的任何不需要的斜杠,並使用 'iconv' 函數打印特殊字符,例如 ™
以上所有對我都不起作用,但我確實讓它起作用了。
我設法通過將每個奇怪的字符轉換為其 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
以上解決方案都不適合我,所以我解決了這樣的問題:
$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 文件夾中: arial.php arial.ttf arial.z
最后,定義“字體文件夾”。 打開 fpdf.php(主庫文件)並添加:
define('FPDF_FONTPATH','font');
PDF適用於所有特殊字符,我相信這是FPDF最初使用的Arial字體本身的問題。 如果其他字體支持您的字符,它也應該適用於其他字體。 祝你好運!
以上都沒有解決我的問題。 我通過以下方式解決了它:
setlocale(LC_CTYPE, 'en_US');
$value = iconv('UTF-8', 'ASCII//TRANSLIT', $value);
$fpdf->Cell(140, 6, $value, 1);
希望你會有所幫助。
參考: 鏈接
以下對我有用(使用 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));
此類是 FPDF 的修改版本,增加了 UTF-8 支持。 此外,它僅嵌入文檔中使用的字體的必要部分,使文件大小比嵌入整個字體小得多。 這些功能最初是為 mPDF 項目開發的。
我用它作為$str = preg_replace('/[^A-Za-z0-9_-]/','', $str);
對我來說已經足夠了,我消除了非字母數字字符
為什么不使用 function PDF 推薦的?
$text = utf8_decode($text);
這個對我有用。
這對我來說是這樣的: iconv("UTF-8", "ISO-8859-1//TRANSLIT//IGNORE", your-text-var-here )
假設您的特殊字符是“°C”,您必須以這種方式對其進行編碼
> $pdf->Cell(X(int),Y(int),iconv("UTF-8", "CP1250//TRANSLIT", '°C'));
試試這個簡單的函數: utf8_encode($txt)
。 這個對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.