sanitize strings

Un paso más allá sanitizando cadenas en WordPress

En WordPress disponemos de varias funciones para sanitizar cadenas y eliminar acentos: sanitize_text_field, sanitize_html_class, sanitize_key, remove_accents… pero es posible que en alguna ocasión se te queden cortas o no cumplan exactamente con lo que necesitas.

Por ejemplo, que limpie una cadena, pero te mantenga los espacios en blanco en lugar de sustituirlos por guiones medios, que sustituya algunos caracteres especiales por otro caracter, o que los elimine de la cadena, etc…

Es por eso que comparto esta función, que puedes añadir a tus desarrollos:

<?php

function my_sanitize_string( string $string, string $char_to_replace = '', bool $keep_spaces = false): string {
    $blacklist = [
        '%',
        'ª',
        'º',
        ',',
        '.',
        ':',
        ';',
        '[',
        ']',
        '{',
        '}',
        '+',
        '?',
        '¿',
        "'",
        '*',
        '"',
        '^',
        '&',
        '#',
        '(',
        ')',
        '·',
        '´',
        '`',
        '@',
        '!',
        '|',
        '/',
        '\\',
        '®',
        '<',
        '>',
    ];

    $spaces = wp_spaces_regexp();
    $sanitize_string = str_replace( $blacklist, $char_to_replace, $string );
    $sanitize_string = preg_replace( "/(?:{$spaces})+/", $keep_spaces ? ' ' : '-', trim( $sanitize_string ) );
    $sanitize_string = remove_accents( $sanitize_string );
    $sanitize_string = preg_replace( '/_+/', '-', $sanitize_string );
    $sanitize_string = preg_replace( '/-+/', '-', $sanitize_string );

    return mb_strtolower( $sanitize_string );
}

Esta función recibe 3 parámetros:

  • $string: la cadena que vamos a «limpiar»
  • $char_to_replace: El caracter por el que vamos a sustituir todos los caracteres «rarunos» que encontremos. Por defecto los eliminamos
  • $keep_spaces: Si es true, mantendremos los espacios en la cadena, en caso contrario (y por defecto) los sustituiremos por guiones medios

Lo primero que tenemos es una lista negra de caracteres que vamos a querer eliminar o sustituir por el parámetro $char_to_replace. A continuación, sustituiremos los espacios por guiones medios, excepto que $keep_spaces sea true.

Después de esto, pasamos la cadena por la función remove_accents de WordPress, y por último nos aseguramos de que no haya más de dos guiones medios y/o bajos consecutivos.

Una vez hecha la limpia, retornamos la cadena en minúscula.

¿Te ha resultado útil esta información? 🍺

Si este post te ha resuelto un problema, invítame a un café o a una cerveza. Con este pequeño gesto me animas a seguir escribiendo.

Comentarios

Deja un comentario

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

  • El fin del tratamiento es únicamente la moderación de comentarios para evitar spam
  • La legitimación es tu consentimiento al comentar
  • No se comunicará ningún dato a terceros salvo por obligación legal
  • Tienes derecho al acceso, rectificación y eliminación de los comentarios