Skip to main content
Wordpress

Sanear nombres de archivos WordPress

Por 9 diciembre, 2020Sin comentarios
Sanear archivos de subida Wordpress

Si eres programador o diseñador, sabrás que una buena práctica en desarrollo web es que todas las urls estén bien codificadas o que no tengan caracteres especiales, espacios o tildes. No solo urls de páginas, sino archivos, imágenes, etc. La mayoría de los navegadores son capaces de codificar urls con caracteres especiales pero otros pueden dar error.

WordPress, de forma automática, sanea las urls de las páginas y post cada vez que publicamos o cambiamos el slug. Pero no hace lo mismo cada vez que subimos un archivo, y eso me parece un error. Es verdad que si subimos un archivo con tildes puede verse sin problemas en el navegador. El dolor de cabeza viene si tenemos que traspasar la web a otro servidor. ¿Os ha ocurrido a vosotros?

Al traspasar las imágenes con tildes al nuevo servidor, este codifica estos caracteres en el nombre de los archivos, por lo tanto, los enlaces que estén guardados en la base de datos ya no funcionan.

Aunque esto se soluciona subiendo todas las imágenes bien nombradas desde el principio, sin tildes ni caracteres especiales, muchas veces no somos los únicos que subimos el contenido de la web. Y no todos tienen el mismo cuidado… Por eso os dejo una función que sanea todos los archivos al subirlos de forma automática, eliminando tildes, caracteres especiales y espacios. De esta forma nos aseguramos que todas las imágenes y archivos se suban de forma correcta.

function sanitize_filename_on_upload( $file ) {
	$invalidCharacters = array(' ','_','—','.','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ','Ā','ā','Ă','ă','Ą','ą','Ć','ć','Ĉ','ĉ','Ċ','ċ','Č','č','Ď','ď','Đ','đ','Ē','ē','Ĕ','ĕ','Ė','ė','Ę','ę','Ě','ě','Ĝ','ĝ','Ğ','ğ','Ġ','ġ','Ģ','ģ','Ĥ','ĥ','Ħ','ħ','Ĩ','ĩ','Ī','ī','Ĭ','ĭ','Į','į','İ','ı','IJ','ij','Ĵ','ĵ','Ķ','ķ','Ĺ','ĺ','Ļ','ļ','Ľ','ľ','Ŀ','ŀ','Ł','ł','Ń','ń','Ņ','ņ','Ň','ň','ʼn','Ō','ō','Ŏ','ŏ','Ő','ő','Œ','œ','Ŕ','ŕ','Ŗ','ŗ','Ř','ř','Ś','ś','Ŝ','ŝ','Ş','ş','Š','š','Ţ','ţ','Ť','ť','Ŧ','ŧ','Ũ','ũ','Ū','ū','Ŭ','ŭ','Ů','ů','Ű','ű','Ų','ų','Ŵ','ŵ','Ŷ','ŷ','Ÿ','Ź','ź','Ż','ż','Ž','ž','ſ','ƒ','Ơ','ơ','Ư','ư','Ǎ','ǎ','Ǐ','ǐ','Ǒ','ǒ','Ǔ','ǔ','Ǖ','ǖ','Ǘ','ǘ','Ǚ','ǚ','Ǜ','ǜ','Ǻ','ǻ','Ǽ','ǽ','Ǿ','ǿ');

	$validCharacters = array('-','-','-','-','A','A','A','A','A','A','AE','C','E','E','E','E','I','I','I','I','D','N','O','O','O','O','O','O','U','U','U','U','Y','s','a','a','a','a','a','a','ae','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y','A','a','A','a','A','a','C','c','C','c','C','c','C','c','D','d','D','d','E','e','E','e','E','e','E','e','E','e','G','g','G','g','G','g','G','g','H','h','H','h','I','i','I','i','I','i','I','i','I','i','IJ','ij','J','j','K','k','L','l','L','l','L','l','L','l','l','l','N','n','N','n','N','n','n','O','o','O','o','O','o','OE','oe','R','r','R','r','R','r','S','s','S','s','S','s','S','s','T','t','T','t','T','t','U','u','U','u','U','u','U','u','U','u','U','u','W','w','Y','y','Y','Z','z','Z','z','Z','z','s','f','O','o','U','u','A','a','I','i','O','o','U','u','U','u','U','u','U','u','U','u','A','a','AE','ae','O','o');

	// Extraer extensión del archivo
   	$ext = end( explode( '.', $file ) );
   	// Extraer nombre del archivo 
   	$filename = substr( $file, 0, -( strlen( $ext ) + 1 ) );
   	// Reemplazar caracteres inválidos por su alternativa
   	$sanitized = str_replace( $invalidCharacters, $validCharacters, $filename );
   	// Reemplazar el resto de caracteres inválidos
   	$sanitized = preg_replace( '/[^a-zA-Z0-9-_.]/','', $filename );
   	// Devolver el nombre de archivo saneado
   	return strtolower( $sanitized.'.'.$ext );
}
 
add_filter( 'sanitize_file_name', 'sanitize_filename_on_upload', 10 );

Si se da el caso de que ya tienes varias imágenes que necesitas renombrar disponemos de varios plugins para hacerlo como Phoenix Media Rename o Media File Rename. No solo te renombra el archivo, sino el permalink donde esté adjunto el archivo. La versión premium te permite hacerlo por lotes ya que detecta aquellas automáticamente las imágenes que necesitan ser renombradas.

¡Espero que os sirva!

Jairo Calero

Jairo Calero

Desarrollador web frontend y backend, especialista en webs app desarrolladas en PHP y Javascript. Experto en HTML, CSS3, PHP y Javascript con frameworks y librerías como jQuery, Angular y Bootstrap. Gestor de herramientas SEO como Google Analytics, Search Console, SEMrush o Hotjar. Email marketing y Big data.

Deja tu respuesta