miércoles, 30 de marzo de 2011

Como quitar con PHP acentos y caracteres raros a una cadena de texto

Como quitar con PHP acentos y caracteres raros a una cadena de texto

He aquí una sencilla forma para reemplazar acentos, tildes, y demás caracteres raros o especiales en una cadena de texto:

$cadenaConAcentos = 'Ésta es una cadena con eñes y áéÍöÜ, Barça,etc.';
$a_tofind = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'à', 'á', 'â', 'ã', 'ä', 'å'
   , 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø'
   , 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ç', 'ç'
   , 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï'
   , 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ÿ', 'Ñ', 'ñ');
$a_replac = array('A', 'A', 'A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a', 'a'
   , 'O', 'O', 'O', 'O', 'O', 'O', 'o', 'o', 'o', 'o', 'o', 'o'
   , 'E', 'E', 'E', 'E', 'e', 'e', 'e', 'e', 'C', 'c'
   , 'I', 'I', 'I', 'I', 'i', 'i', 'i', 'i'
   , 'U', 'U', 'U', 'U', 'u', 'u', 'u', 'u', 'y', 'N', 'n');
$cadenaSinAcentos = str_replace($a_tofind, $a_replac, $cadenaConAcentos);
echo $cadenaSinAcentos;

Nota:
Desde la versión de PHP 4.0.5, todos los parámetros de la función str_replace() pueden ser de tipo array.


Mejoras prácticas:
Si no vas a escapar caracteres, evita el uso de comillas dobles en las cadenas.

Observaciones:
En la web encontré el uso de strtr() para hacer reemplazos, pero en muchos casos da problemas con los caracteres especiales debido a la traducción a nivel de bits que hace esta función. Ejemplo:

$cadena = "Comunicación, Función, Código";
$tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
$replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
$nuevaCadena = strtr($cadena, $tofind, $replac);

No hay comentarios:

Publicar un comentario

Datos personales

Mi foto
Podrás encontrar códigos recursos y artículos sobre PHP, JavaScript, jQuery, MooTools, Ajax, CSS, HTML, UML, RUP, AUP, XP (eXtreme Programming), Six-Sigma, CMMI, FrameWorks, Zend Framework, Magento, CodeIgniter, CakePHP, Joomla 1.5, Doctrine, Active Record, ORM, POO, MVC, MySql, PostgreSql. Este espacio está destinado a ayudar y compartir un poco de lo mucho que he recibido de la comunidad en la Red.