2008-10-13 18 views
5

Tengo un conjunto de documentos de Word que deseo publicar utilizando una herramienta PHP que he escrito. Copio y pego los documentos de Word en un cuadro de texto y luego los guardo en MySQL usando el programa PHP. El problema que tengo surge de todos los caracteres no estándar que tienen los documentos de Word, como comillas y elipsis ("..."). Lo que hago en este momento es buscar manualmente y reemplazar este tipo de cosas (y también símbolos extraños como e-acute) con texto sin formato o entidades HTML (& eacute; etc) ¿Hay una función en PHP que puedo llamar que lo haga? tomar el resultado de un documento de Word y convertir todo lo que debe ser entidades en entidades, y otros símbolos que no se muestran correctamente en Firefox en los símbolos que se muestran.Convertir un documento de Word en HTML utilizable en PHP

Gracias!

Respuesta

3

Una mejor solución sería asegurarse de que su base de datos esté configurada para admitir caracteres UTF-8. Los caracteres adicionales disponibles en el conjunto extendido deben cubrir todos los caracteres "no estándar" de los que está hablando.

De lo contrario, si realmente debe convertir estos caracteres en entidades HTML, use htmlentities().

+0

En mi experiencia, incluso con todas las codificaciones de caracteres establecidos derecha, algunos caracteres simplemente tragado por el momento en que llegan al navegador. No sé si esto es un error en PHP (el lenguaje de servidor que uso más) o qué, pero he encontrado que la conversión a entidades es más confiable. – eyelidlessness

+0

Hola Richard, ¿algún consejo sobre cómo configurar MySQL para que sea compatible con UTF-8? Gracias! – Ben

+0

CREATE DATABASE db_name CHARACTER SET 'utf8' - ver http://dev.mysql.com/doc/refman/5.0/en/charset-database.html y http://dev.mysql.com/doc/refman/5.0 /en/charset-table.html. Tenga en cuenta que tendrá que hacer algo como SET NAMES 'utf8'; cuando se conecta a la base de datos para asegurarse de que obtiene datos en UTF-8. –

0

htmlspecialchars() le llevará un largo camino, pero cuidado porque los documentos de Word son complicados.

5

Esto me ha servido bien en el pasado:

$str = mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8') 
1

creo que todas estas respuestas se pierda un punto vital. Windows mismo usa un sabor de windows de latin1, así que si pegas algunos caracteres especiales en (como citas asimétricas) en un formulario en una máquina de Windows y se envía a una caja de Unix (o cualquier cosa que no sea muckrosoft) (ya sea a una base de datos o lo que sea) algunos de los personajes no coinciden con nada que el sistema Unix comprenda, de ahí los personajes confusos y confusos. Lo que esto significa es que incluso si tienes una base de datos UTF-8 y usas htmlentities, algunas cosas desagradables seguirán llegando porque son personajes que el sistema operativo no reconoce, ni siquiera son parte de UTF-8. son inventos exclusivos de Microsoft. Me encantaría saber de una solución ingeniosa: lo que hago es incluir manualmente en la lista negra los códigos de caracteres de los caracteres únicos de Microsoft que he encontrado con una lista (también manual) de caracteres UTF-8, hacer un str_replace para todos estos, y ENTONCES puedes hacer lo que quieras con ellos - iconv, htmlentities, guardar directamente en una base de datos utf8, ya no importa.

Mi comprensión de todo esto es un poco inestable - echa un vistazo a http://www.cs.tut.fi/~jkorpela/www/windows-chars.html para una excelente explicación que he mutilado en forma corta arriba. - Si alguien tiene una mejor solución (¡seguramente hay una por ahí!) De cómo PHPify lo que explica este artículo ... ¡Me encantaría escucharlo!

0

Aquí hay una solución que preparé para el problema con el juego de caracteres de ventanas no portátil. Esto reemplaza los personajes ofensivos casi latinos con sus entidades HTML equivalentes.

$translation=array(
    // reference from http://www.cs.tut.fi/~jkorpela/www/windows-chars.html 
    "\x82" => "‚", 
    "\x83" => "ƒ", 
    "\x84" => "„", 
    "\x85" => "…", 
    "\x86" => "†", 
    "\x87" => "‡", 
    "\x88" => "ˆ", 
    "\x89" => "‰", 
    "\x8a" => "Š", 
    "\x8b" => "‹", 
    "\x8c" => "Œ", 
    "\x91" => "‘", 
    "\x92" => "’", 
    "\x93" => "“", 
    "\x94" => "”", 
    "\x95" => "•", 
    "\x96" => "–", 
    "\x97" => "—", 
    "\x98" => "˜", 
    "\x99" => "™", 
    "\x9a" => "š", 
    "\x9b" => "›", 
    "\x9c" => "œ", 
    "\x9f" => "Ÿ", 
);  
return str_replace(array_keys($translation),array_values($translation),$input); 

que funciona para mí TM

Cuestiones relacionadas