2009-09-21 7 views

Respuesta

13
function strtr_utf8($str, $from, $to) { 
    $keys = array(); 
    $values = array(); 
    preg_match_all('/./u', $from, $keys); 
    preg_match_all('/./u', $to, $values); 
    $mapping = array_combine($keys[0], $values[0]); 
    return strtr($str, $mapping); 
} 
+6

Debe considerar que el segundo parámetro también puede ser una matriz para la asignación. – Gumbo

+0

No lo necesitaba, pero sería más fiel a la firma de strtr. – joeforker

2
 
    function strtr_utf8($str, $from, $to) 
    { 
     $keys = array(); 
     $values = array(); 
     if(!is_array($from)) 
     { 
      preg_match_all('/./u', $from, $keys); 
      preg_match_all('/./u', $to, $values); 
      $mapping = array_combine($keys[0], $values[0]); 
     }else 
      $mapping=$from; 
     return strtr($str, $mapping); 
    } 

I editado ligeramente la función de la joeforker para volver la funcionalidad de la utilización de segundo parámetro como matriz para replace_pairs.

+0

Funciona de maravilla. La respuesta aceptada debe moverse a esta. –

-1
$fromto = array(
    'À'=>'A','Á'=>'A','Ã'=>'A','Â'=>'A', 
    'É'=>'E','Ê'=>'E', 
    'Í'=>'I', 
    'Ó'=>'O','Õ'=>'O','Ô'=>'O', 
    'Ú'=>'U','Ü'=>'U', 
    'Ç'=>'C', 
    'á'=>'a','à'=>'a','ã'=>'a','â'=>'a', 
    'é'=>'e', 
    'ê'=>'e', 
    'í'=>'i', 
    'ó'=>'o','õ'=>'o','ô'=>'o', 
    'ç'=>'c' 
    ); 
    $filter = strtr($filter,$fromto);