Pregunta:
Fecha: 07-06-2017 01:56:36
(En Español)
Tengo un problema cuando trabajo con tiny MCE, y guardo el HTML resultante, al mostrar resúmenes, lo primero que hago para los resúmenes es eliminar etiquetas y después cortar número de carácteres, por ejemplo:
he probado también sin hacer esto y me pasa igual, el tema es que cuando el corte de carácteres cae justo donde existe (á,é,í,ó,ú,ñ, ¿,¡,?,!, etc....) me sale un símbolo extraño. Adjunto una captura de pantalla para que podáis entenderme mejor.
El primer símbolo es una ú de número
El segundo es una ñ de año

Votos: 0 - Respuestas: 12 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
Caracteres extraños cuando corto justo por un acento, o ñ, o símbolos[Resuelta]
Hola compañer@s,Tengo un problema cuando trabajo con tiny MCE, y guardo el HTML resultante, al mostrar resúmenes, lo primero que hago para los resúmenes es eliminar etiquetas y después cortar número de carácteres, por ejemplo:
substr(strip_tags(html_entity_decode($row['answer'])), 0, 150)
he probado también sin hacer esto y me pasa igual, el tema es que cuando el corte de carácteres cae justo donde existe (á,é,í,ó,ú,ñ, ¿,¡,?,!, etc....) me sale un símbolo extraño. Adjunto una captura de pantalla para que podáis entenderme mejor.
El primer símbolo es una ú de número
El segundo es una ñ de año

Votos: 0 - Respuestas: 12 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 07-06-2017 05:08:37 Hola Fran, podrías darnos un ejemplo reducido de lo que hay dentro de tu variable $row['answer']?
Saludos, Votos: 0 - Link respuesta -
Fecha: 08-06-2017 00:12:37 Hola Fernando,
si por supuesto. por ejemplo esta es la primera que falla, no hay nada raro como te digo siempre me pasa cuando corto justo por donde hay un acento ñ o cosas así
Actualmente los productos se entregan con posibilidad de montaje incluido en la capital y extrarradio, con una limitación de hasta 60 Km del núcleo urbano de la capital. Para entregas a distancias más largas consultar, ya que hay tarifas adicionales que se tienen que valorar en función del pedido y la distancia.
A ver si se te ocurre algo XD Votos: 0 - Link respuesta -
Fecha: 08-06-2017 05:37:12 Bien Fran, pero ese no es el texto que esta dentro de la variable, no si?, digo, debería esta encodeado de alguna forma, además con etiquetas html de algun tipo, no? (sino no tendría sentido pasarlo por las funciones html_entity_decode y strip_tags).
Lo que necesitaría es un fragmento del texto tal cual esta dentro de la variable $row['answer'], ya que quiero ver como esta códificado.
Saludos! Votos: 0 - Link respuesta -
Fecha: 08-06-2017 06:22:42 Hola de nuevo Fernando, el texto que te he pasado esta tal cual en BBDD, la función de html_entity_decode y strip_tags está porque pueden existir etiquetas, pero no es el caso del texto que te he pasado. no obstante siempre que he hecho cosas de estas me ha pasado lo mismo, no es la primera vez, y he sentido curiosidad porque no he encontrado nada, a ver si por esta gran comunidad alguien sabe por qué Votos: 0 - Link respuesta
-
Fecha: 08-06-2017 07:22:47 Hola Fran, si usas html_entity_decode es porque en algún otro momento has tenido que hacer el encode de esa información, ya sea con la función htmlentities o algún otro método.
Suponiendo que no tienes problemas en este punto (cosa que no puedo verificar si no me envías el texto encodeado) debes verificar que siempre estés trabajando con el mismo tipo de encode (idealmente utf-8), ya se a nivel estructura de base de datos (charset de las columnas implicadas), a nivel meta html de tu web (incluyes el meta dentro de la etiqueta header), a nivel conexión desde PHP con MySQL (lo configuras en la cadena de conexión o configurando la misma, dependiendo el método que uses) y finalmente a nivel persistencia de archivos en el filesystem (esto lo configuras en el IDE de desarrollo).
Revisa todos esos puntos y luego nos cuentas.
Aprovecho este comentario para incluir una imagen de wikipedia que grafica el uso de los diferentes encodigns en web a nivel mundial (información suministrada por Google), claramente utf-8 es quien manda :)

Saludos y buen código. Votos: 0 - Link respuesta -
Fecha: 09-06-2017 03:53:09 Hola de nuevo Fernando,
todo lo que dices lo tengo, y acabo de probar eliminando las funciones de encode y decode en el alta y en el listado y ocurre lo mismo.
Me crearé una función que no me permita el corte de palabras y ya está, solo quería saber por qué ocurría esto nada más.
Gracias Votos: 0 - Link respuesta -
Fecha: 09-06-2017 04:57:49 Hola Fran, entiendo, pero es un problema en la codificación y me gustaría poder ayudarte a encontrar la respuesta.
Que versión de PHP estas utilizando? te consulto esto porque la función html_entity_decode ha cambiado su tipo de codificación por defecto de ISO-8859-1 a UTF-8 a partir de la versión 5.4, tal vez venga por aquí el tema.
Para salvar esta situación puedes parametrizar la función, veamos:
substr(strip_tags(html_entity_decode($row['answer'], ENT_QUOTES, 'UTF-8')), 0, 150)
Nota: observa que utilice la constante de configuracion ENT_QUOTES, pero por defecto es ENT_COMPAT, revisa cual se adapta mejor a tu caso, aquí el enlace a la documentación oficial.
Sigamos pensando..., vamos por parte, tal vez esto que te voy a ir comentado ya lo sabes, o no, no lo se, pero prefiero pecar por sobre-explicación a estar asumiento/suponiendo cosas, veamos (voy a numerar para que te sea más facil ir respondiendo cada punto):
1) ¿Qué charset usan las columnas implicadas de tu base de datos?
Puedes ver esto desde phpMyAdmin, mira la siguiente imagen:

Nota: lo que se puede ver en la imagen no es el charset, sino la "collation" (o en español: cotejamiento), pero sabiendo la collation se puede deducir rapidamente el charset (para este caso utf-8) ya que toda collation esta asociada con un juego de caracteres especifico.
2) ¿Cómo te conectas con la base de datos, usas PDO, mysqli, otro? y en el caso usado, ¿cómo seteas el charset para la conexión?
3) ¿Usas HTML5, xHTML o algun otro? comparte el meta chaset que usas (tal cual lo tienes en el html).
Entiendo que estas apurado y un buen workaround podría ser no cortar la palabra, haciendo el corte solo en los espacios (si es lo que te esta funcionando), pero sigamos el tema hasta encontrar la solución, la códificación de caracteres suele ser un tema peludo, pero hasta ahora siempre he podido dar con la solución (tengo bastante experiencia en este campo).
Espero tus respuestas para continuar, saludos y buen código! Votos: 1 - Link respuesta -
Fecha: 09-06-2017 05:43:11 Hola de nuevo Fernando, gracias por seguir aportando ideas,
lo tengo todo bien, lo único que no se y no puedo verlo hasta el Lunes es el meta-charset de html5, que juraría que está en utf-8 pero no estoy seguro, luego la versión de php tampoco puedo verla hasta el lunes.
El Lunes a primera hora lo miro a ver que tal.
Que tengas un buen fin de semana, Votos: 1 - Link respuesta -
Fecha: 11-06-2017 08:49:08 Hola Fran, creo haber tenido un problema similar y he encontrado dos formas de resolverlo:
1-(si no tienes problemas en la bd, ocea, si cuando ves los datos que tienes almacenados en las tablas -a través de un cliene de mysql o consola, no tu aplicación) los muestra correctamente) codificando la salida antes enviarla al navegador. Ej:
echo utf8_encode('Tu cadena con caracteres españoles');
NOTA: eso es válido sólo si en el html has establecido la codificación a utf8
2-(la opción que prefiero) codificar todo lo que almacenes (al momento de hacer un insert o update) en la base de datos. Yo utilizo la siguiente función:
public static function sanitize_string(&$text) { trim($text); $text = filter_var($text, FILTER_SANITIZE_FULL_SPECIAL_CHARS); $text = filter_var($text, FILTER_SANITIZE_STRING, array(FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP)); }
Con esto no sólo me evito ese problema, sino también evito un problema similar con las peticiones AJAX así también evito inyección de SQL y código JS o HTML.
Espero que te sirva, Saludos!
PD: Cualquier duda y/o sugerencia... Votos: 1 - Link respuesta -
Fecha: 12-06-2017 21:58:56 Hola Fernando y Esteban,
gracias por vuestros aportes, Fernando, he revisado todo lo que me dijiste y he añadido , ENT_QUOTES, 'UTF-8' a la función y nada, lo tengo todo bien en todos los sitios que hemos hablado, definitivamente voy a hacer la función que no pueda cortar palabras.
Esteban he probado también lo tuyo y nada, no hay manera.
Muchas gracias a ambos por el interés!! Votos: 0 - Link respuesta -
Fecha: 13-06-2017 05:29:47 Hola Fran, en algún lado esta el problema, mientras desarrollas la función que comentas verifiquemos un poco más. Algo que no se menciono es verificar cual es el charset configurado por defecto en tu servidor (modulo PHP).
Ejecuta la siguiente sentencia en un nuevo archivo PHP e indicanos cual fue el resultado.
echo ini_get('default_charset');
Saludos y buen código! Votos: 0 - Link respuesta -
Fecha: 13-06-2017 21:16:42 Hola de nuevo Fernando,
con lo que dices me imprime UTF-8
Saludos Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
