2010-08-18 27 views
18

Tengo un formulario web que los usuarios pueden completar y que llena un PDF con FPDF y PHP. Cuando un usuario ingresa una palabra con un apóstrofo, aparece una barra antes en el PDF.Caracteres especiales en FPDF con PHP

De forma similar, los caracteres especiales como los símbolos de marca registrada están codificados incorrectamente.

Las preguntas más frecuentes fPDf dicen utilizar:

$str = utf8_decode($str); 

Pero no estoy seguro de cómo aplicar eso a todo el PDF. Intento pensarlo como si fuera una página HTML, pero eso no ayuda.

¿Alguna idea?

Respuesta

51

cuenta de esto de la siguiente manera (pagesubtitle es el nombre del campo de texto en el formulario):

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

luego imprimirlo:

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

Esto eliminará cualquier barras no deseadas después de apóstrofos, así como utilizar la función 'iconv' para imprimir caracteres especiales como ™

+0

esto funcionó para mí – mfadel

0

Parece que tiene habilitado magic_quotes. Vea el enlace para deshabilitar magic_quotes.

18

Todo lo anterior no funcionó para mí, pero lo hice funcionar.

Logré hacerlo "al estilo bárbaro" simplemente traduciendo cada carácter extraño a su valor de URL. ¡Entonces simplemente decodifique la url y listo!

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

Y por supuesto que me llama la función

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

salida de Dar:

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

+0

que funcionó bien para mí =) – PtF

+0

el camino "bárbaro" funciona mucho más cool! gracias – mikewasmike

+1

Puede dar matrices str_replace como parámetros. – Keelan

3

ninguna de las soluciones anteriores funcionó para mí, por lo Resolví el problema de esta manera:

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

Antes de tratar las líneas anteriores, haga lo siguiente:

copia de c: /Windows/Fonts/Arial.ttf a la carpeta/tutorial de FPDF.

editar el contenido de makefont.php

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

Ejecutar makefont.php

Copiar los siguientes archivos en la carpeta/fuente de FPDF: arial.php arial.ttf arial.z

Finalmente, defina la "carpeta de fuentes". Abre fpdf.PHP (archivo de la biblioteca principal) y añadir:

define('FPDF_FONTPATH','font'); 

El PDF funciona para mí con todos los caracteres especiales, creo que era el problema en la fuente Arial en sí, que utiliza un principio FPDF. También debería funcionar con otras fuentes, si son compatibles con tus personajes. ¡Buena suerte!

0

Esta clase es una versión modificada de FPDF que agrega compatibilidad con UTF-8. Además, incluye solo las partes necesarias de las fuentes que son utilizadas en el documento, lo que hace que el tamaño del archivo sea mucho más pequeño que si las fuentes integradas estuvieran incrustadas. Estas características se desarrollaron originalmente para el proyecto mPDF.

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

-1

Prueba esta función simple: utf8_encode($txt). Esto funciona para mi.

3

Ninguno de los anteriores ha resuelto mi problema. Lo había resuelto de la siguiente manera:

setlocale(LC_CTYPE, 'en_US'); 

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

Espero que sean útiles.

Referencia:Link

+3

Realmente, genial. Eso es lo que estaba buscando por 3 horas. –