funcion en php para limpiar cadenas de texto en utf8

A continuación indico una simple función que he desarrollado y el uso básico que le estoy dando es para limpiar las cadenas de esto de html, carácteres htmlentities, tabulaciones, espacios en blanco, etc.. para insertar una cadena de texto “limpia” en los metatags y title de la cabecera en el código html.

/**
    * Función para limpiar cualquier meta tag o cadena.
    * Lo limpia de caracteres htmlentities tipo &aacute, > etc
    * Le quita los saltos de linea de html, los <br /> y cualquier carácter de tabulacion o que le añada espacio.
    * Adicionalmente se le puede pasar un numero de caracteres que se quiere mostrar, de esta manera el string se corta por ese numero
    * 
    * @param mixed $string
    * @param mixed $corte
    * @return string
    */
    function limpiar_metas($string,$corte = null)
    {
        $caracters_no_permitidos = array(""","'");
        # paso los caracteres entities tipo &aacute; $gt;etc a sus respectivos html
        $s = html_entity_decode($string,ENT_COMPAT,'UTF-8');
        # quito todas las etiquetas html y php
        $s = strip_tags($s);
        # elimino todos los retorno de carro
        $s = str_replace("r", '', $s);
        # en todos los espacios en blanco le añado un <br /> para después eliminarlo
        $s = preg_replace('/(?<!>)n/', "<br />n", $s);
        # elimino la inserción de nuevas lineas
        $s = str_replace("n", '', $s);
        # elimino tabulaciones y el resto de la cadena
        $s = str_replace("t", '', $s);
        # elimino caracteres en blanco
        $s = preg_replace('/[ ]+/', ' ', $s);
        $s = preg_replace('/<!--[^-]*-->/', '', $s); 
        # vuelvo a hacer el strip para quitar el <br /> que he añadido antes para eliminar las saltos de carro y nuevas lineas
        $s  = strip_tags($s);
        # elimino los caracters como comillas dobles y simples
        $s = str_replace($caracters_no_permitidos,"",$s);
        
        if (isset($corte) && (is_numeric($corte)))
        {
            $s = mb_substr($s,0,$corte, 'UTF-8');
        }
                
        return $s;
    }

de mi propia cosecha!
Supongo que se podría optimizar más, pero me ha costado hacer una buena función para resolver todos mis problemas que tenia de espacios en blancos, saltos de linea, carácteres htmlentities,etc.. y he tenido que hacer algunas “pirulas”.

8 opiniones en “funcion en php para limpiar cadenas de texto en utf8”

  1. El código tira errores por todos lados, para empezar aca:

    $caracters_no_permitidos = array(“””,”‘”);

    después te elimina las letras “r” de las meta

    no entiendo cual es la idea de publicar códigos con errores y hacerle perder el tiempo a la gente, estaría bueno chequear antes

  2. Vean este problema que me da

    Texto antes de ser procesado por la funcion
    “Hoy me levante y en cuanto vi mis noticias en #facebook #descubri una publicacion que conducia a este documental”

    Texto despues de ser procesado por la funcion
    “Hoy me levae y e cuao vi mis oicias e #facebook #descubi ua publicacio que coducia a ese documeal”

    Como veran le faltan letras a la mayoria de las palabras y revisando el codigo no encuentro ningun error, pero debo agregar que no soy muy bueno con los Regex, por lo que no podria encontrar error de haberlo.

    Alguna ayuda?

    1. ¿no encontras el error porque te desaparecen las letras?

      esta bastante claro, por ejemplo aca se van las “n”

      $s = str_replace(“n”, ”, $s);

      El código es una basura sin chequear

  3. hola buen dia como se hace para que en los textos de formulario deja tu comentario que tienes aparescan los nombres como nombre, Website, email dentro de la caja de texto. gracias

  4. Yo utilizo una función similar para generar la descripción en las meta de mi sitio web. Hay maneras mucho menos engorrosas de hacer esto con determinadas funciones propias de php.
    Bastana con strip_tags, trim, substr, chop, y srt_replace n, r para retornos y saltos.

    Igualmente, es interesante como dices refinarla y podrías utilizarla para limpiar cadenas que se guarden en la base de datos. Considerando que la función nl2br ahora utiliza xhtml, agrega el br con la barra. Pero en mi caso no soy amante de xhtml, tengo más fe en html5, o simplemente me tiene sin cuidado utilizar el 4 trans. por ende, si la página procesada está declarada como HTML los br pasarían incompletos por la función.

    1. Gracias por tu comentario.

      Es cierto se podría refinar algo más. Lo cierto es que he tenido problemas usando srt_replace() para eliminar los saltos de linea y retornos de carro, no me lo hacía bien, dejándome espacios en blanco que luego la función trim() no era capaz de eliminar. Posiblemente había algo que no estaba haciendo bien, no lo sé, pero al final conseguí hacer esta función que si esta funcionando bien, aunque tenga unas cuantas líneas más.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *