// post

Programación

substr HTML seguro en PHP

Si habéis programado en PHP seguramente habréis utilizado la función substr que sirve para obtener una subcadena de una cadena de texto mayor tamaño. Por ejemplo:

$cadena = ‘Hola Mundo!’;
$subcadena = substr($cadena, 0, 4);
print $subcadena;
 

Obtendríamos como resultado ‘Hola’.

Pero si estamos usando una cadena que contiene código HTML, es posible que se queden etiquetas abiertas y nos de problemas. Por ejemplo:

$cadena = ‘<a href="helloworld.php">Hola Mundo!</a>’;
$subcadena = substr($cadena, 0, 4);
print $subcadena;
 

Obtendríamos como resultado ‘<a h’. Y no es lo que quería.

He encontrado una solución en los comentarios de la propia web de PHP. Sería usar la siguiente función en vez de substr.

< ?php

/**
 * string csubstr ( string string, int start [, int length] )
 *
 * @author FanFataL
 * @param string string
 * @param int start
 * @param [int length]
 * @return string
 */

function csubstr($string, $start, $length=false) {
    $pattern = ‘/(\[\w+[^\]]*?\]|\[\/\w+\]|<\w+[^>]*?>|< \/\w+>)/i’;
    $clean = preg_replace($pattern, chr(1), $string);
    if(!$length)
        $str = substr($clean, $start);
    else {
        $str = substr($clean, $start, $length);
        $str = substr($clean, $start, $length + substr_count($str, chr(1)));
    }
    $pattern = str_replace(chr(1),‘(.*?)’,preg_quote($str));
    if(preg_match(‘/’.$pattern.‘/is’, $string, $matched))
        return $matched[0];
    return $string;
}

?>
 

Por tanto, si ahora cambiamos substr por csubstr, obtendríamos como resultado ‘<a href=”helloworld.php”>Hello</a>’. Que a la hora de imprimirlo en una web quedaría correctamente.

Comentarios

Los comentarios están cerrados.

  1. Mola!. Me la apunto :D.

    Escrito por Opikanoba | 23/Sep/2009, 10:23 am
  2. muy bueno gracias

    Escrito por wowweed.es | 5/Oct/2009, 4:47 pm

Bienvenido a The Power of Mind

The Power of Mind es el blog personal de DraXus, orientado a temas de Informática, Software Libre e Internet. Más sobre el autor…

del.icio.us flickr plurk twitter skype
linkedin facebook tuenti lastfm youtube

Recomendados

Yo participo en el Software Freedom Day 2011
AndaluciaPeople.com
Alhambrismo.com

flickr

Switch to our mobile site