2010-08-18 4 views
18

У меня есть веб-форма, которую пользователи могут заполнить, и этот контент заполняет PDF с помощью FPDF и PHP. Когда пользователь вводит слово с апострофом, в нем появляется надпись «Слэш».Специальные символы в FPDF с PHP

Аналогично, специальные символы, такие как символы товарного знака, закодированы неправильно.

В FPDF FAQs говорят, чтобы использовать:

$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

0

Похоже, что у вас есть magic_quotes. См. Ссылку, чтобы отключить magic_quotes.

18

Все вышеперечисленное не сработало для меня, но я получил его для работы.

Мне удалось сделать это «варварским путем», просто переведя каждый странный символ на его значение 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; 

Давая выход:

Диас, Миркулы, Sábado, Миркулы

+0

, который работал хорошо для меня =) – PtF

+0

«варварских» способ работает круче! спасибо – mikewasmike

+1

Вы можете указать str_replace массивы в качестве параметров. – Keelan

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'); 

Execute 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 часа. –

Смежные вопросы