Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/04/2008, 05:25
etej
 
Fecha de Ingreso: enero-2008
Mensajes: 63
Antigüedad: 16 años, 3 meses
Puntos: 0
Convertir caracteres especiales en formato url

Hola!
Dado un texto de entrada, debo convertirlo en formato url. Por lo tanto, en caso de tener caracteres especiales lo debo transformar a % seguido del código ascii en notacion hexadecimal (esto segun: http://es.kioskea.net/internet/url.php3).
Para esto me hice la siguiente funcion:

function translate2url_cod($text){
$output = '';
$tab_text = str_split($text);
foreach ($tab_text as $id=>$char){
$ascci_cod = ord($char);
if(($ascci_cod>122)
||(($ascci_cod >= 0)&&($ascci_cod <= 47))
||(($ascci_cod >= 58)&&($ascci_cod <= 64))
||(($ascci_cod >= 91)&&($ascci_cod <= 96))
){
$hex = dechex(ord($char));
$output .= '%' . $hex;
}else{
$output .= $char;
}
}
return $output;
}

El tema pasa porque por ej, si tengo una frase del estilo a:
á, é, í, ó y ú
la sentencia $tab_text = str_split($text) en lugar de ubicar cada caracter en una posicion del arreglo, cada vocal acentuada me la traduce en dos códigos. Por ej, la á:
char: � - ascci_cod: 195 - hex: c3
char: � - ascci_cod: 161 - hex: a1
Cuando en realidad seria en ascii el valor 160, que al traducirse segun url %A0.
Me podrian ayudar para ver como obtener caracter a caracter en lugar de la funcion str_split?

Muchas gracias!
Edith