¿Cómo evitar error de substr()?

Tengo una web de noticias, el problema es que cuando leo los primeros caracteres de la descripción y si hay una etiqueta html como por ej

<span>
y no esta cerrada descompagina toda la web. Digamos el cierre de la etiqueta esta dentro de los caracteres que no lee, ¿cómo lo soluciono?

1 respuesta

Respuesta
1

Convendría tener el código completo a mano, pero este tipo de errores (no lee cosas, corta las strings de forma imprevisible, etc) se suelen dar por inconsistencia en la codificación y/o juego de caracteres.
Esta misma tarde estuve desarrollando un parser web para sacar RSS y tuve exactamente el mismo problema. La solución fue comprobar el charset de la web (en tu caso, el origen de la string que quieres manipular), que era ISO-8859-2. Luego, codificar el fichero .php con el mismo juego de caracteres (en Notepad++ es fácil, menú codificación), y por último, si aún sigues con problemas, declara el mismo charset manualmente en el HTML.
Si tratas con una base de datos, puedes utilizar http://www.php.net/manual/en/function.mysql-set-charset.php para que la conexión con la BD se realice con el mismo charset, aunque tendrías que ver qué charset está utilizando también la base de datos...
Lo que suele hacerse ahora es ponerlo todo en UTF-8 y recurrir a mb_substr(), que funciona para UTF-8 (mb es de multibyte).

mmmm no , ese no era el problema , no es el juego de caracteres sino que hay apertura de etiquetas html pero sin cierre dentro de uin arreglo php y entonces desentona el resto del areeglo.

¿Cuál es la duda entonces? Inicialmente dices que substr() no lee la cadena al completo, pero en realidad es un problema de HTML mal formado. Corregir ese HTML desde código no es sencillo.

Y como hacen las paginas de noticias que ponen los primeros caracteres y luego....LEER MAS , sin terminar el texto completo pero sin que les tire error?

Vale, ahora ya tiene todo mucho más sentido :)

Lo que hacen es eliminar las etiquetas HTML del texto (convertirlo en texto plano), sacar un texto de una longitud máxima, recortar por el final hasta el último espacio para no cortar palabras y añadir la coletilla "... Leer más".

Para ello puedes utilizar strip_tags(), htmlentities() o htmlspecialchars(), entre otras. La segunda va bien porque la primera no valida el HTML, y si está mal formado (etiquetas como por ejemplo <span mal cerradas) puede estropear el texto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas