2010-08-18 159 views
18

我有一個Web表單,用戶可以填寫該表單,並使用FPDF和PHP填充PDF。當用戶使用撇號輸入單詞時,在PDF上會出現斜線。FPDF中的特殊字符與PHP

同樣,商標符號等特殊字符編碼錯誤。

的FPDF常見問題解答說,使用方法:

$str = utf8_decode($str); 

但我只是不知道如何應用到整個PDF。我試圖把它看作是一個HTML頁面,但這沒有幫助。

任何想法?

回答

51

通過執行以下操作想通了這一點(pagesubtitle是文本字段的形式名稱):

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

然後打印出來:

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

這將消除任何不必要的斜槓以下撇號,以及使用'iconv'功能來打印特殊字符,如™

+0

這個工作對我來說 – mfadel 2018-01-15 10:17:07

0

聽起來像你有magic_quotes啓用。查看禁用magic_quotes的鏈接。

18

以上所有都不適用於我,但我確實得到它的工作。

我設法通過將每個奇怪的字符轉換爲它的url值來實現它的「野蠻方式」。然後簡單地解碼url和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; 
} 

當然,我調用函數

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

給予輸出:

迪亞斯,Miércoles,Sábado,miércoles

+0

爲我工作得很好=) – PtF 2014-07-26 18:08:03

+0

的「野蠻」的方式工作方式旁人!謝謝 – mikewasmike 2015-01-15 20:54:05

+1

你可以給str_replace數組作爲參數。 – Keelan 2015-01-19 18:06:49

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的/教程文件夾。

編輯makefont.php

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

的內容執行makefont.php

將以下文件複製到FPDF的/字體文件夾: arial.php ARIAL.TTF arial.z

最後,定義「字體文件夾」。打開fpdf。PHP(主庫文件),並添加:

define('FPDF_FONTPATH','font'); 

的PDF工作對我來說所有的特殊字符,我相信這是在Arial字體本身,這FPDF最初使用的問題。如果它們支持你的角色,它也應該和其他字體一起工作。祝你好運!

0

該類是FPDF的修改版本,增加了對UTF-8的支持。此外,它僅嵌入文檔中使用的 字體的必要部分,使文件的大小比嵌入整個字體的字體小得多。這些功能最初是爲mPDF項目開發的 。

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

-1

試試這個簡單的功能:utf8_encode($txt)。這個對我有用。

3

以上都不能解決我的問題。我通過以下方式解決了這個問題:

setlocale(LC_CTYPE, 'en_US'); 

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

希望你能幫上忙。

參考:Link

+3

真的,太棒了。那是我正在尋找3個小時。 – 2017-12-24 15:36:19