Warning: Invalid argument supplied for foreach() in /home/desarrollo/public_html/wp-content/themes/materialgeek/functions.php on line 769
Tutoriales PHP

Usando substr sin dañar las etiquetas HTML

Substr es sin duda una función muy práctica de PHP que nos permite recortar una cadena de texto e imponer un límite a la misma de una manera sencilla. En algunas ocasiones, resulta que en la cadena de texto hay además, etiquetas HTML; Si se tratara de una cadena estática, podríamos calcular hasta donde cortar, sin embargo en una cadena dinámica no podríamos adivinar en cada caso y terminaríamos con etiquetas sin cerrar.

Y como soy un fiel creyente de que cada problema en programación tiene una solución sencilla, les comparto esta función de parte de un usuario de Stackoverflow.

function substr_tags($code, $limit = 300){
if ( strlen($code) <= $limit ){return $code;} $html = substr($code, 0, $limit); preg_match_all ( "#<([a-zA-Z]+)#", $html, $result ); foreach($result[1] AS $key => $value){if ( strtolower($value) == 'br' ){unset($result[1][$key]);}}
$openedtags = $result[1];preg_match_all ( «##iU», $html, $result );
$closedtags = $result[1];
foreach($closedtags AS $key => $value){if ( ($k = array_search($value, $openedtags)) === FALSE ){continue;}
else{unset($openedtags[$k]);}}
if ( empty($openedtags) ){if ( strpos($code, ' ', $limit) == $limit ){return $html.»…»;} else {
return substr($code, 0, strpos($code, ' ', $limit)).»…»;}}
$position = 0;$close_tag = «»;
foreach($openedtags AS $key => $value){
$p = strpos($code, (''), $limit);
if ( $p === FALSE ){$code .= ('');} else if ( $p > $position ){$close_tag = '';$position = $p;}}
if ( $position == 0 ){return $code;}
return substr($code, 0, $position).$close_tag.»…»;
}

Se trata de una función que corta el texto y sin dañar las etiquetas html, bastante simple.
//uso
$cadena = «Hola geek <p>soy un texto</p> y me gusta esta página!»;
echo substr_tags($cadena, 22); //retorna «Hola geek <p>soy un te</p>»

- - - - - - - - - - - - - - - - - - - - - - - -

En caso de tener problemas para hacer que funcione (a causa de que wordpress daña los caracteres) pueden ver la demo acá y copiar el código desde ahí mismo.