Foros del Web » Programando para Internet » PHP »

problema con la url

Estas en el tema de problema con la url en el foro de PHP en Foros del Web. hey, tengo este problema y he buscado todas las funciones y no se que hacer: yo tengo una página de error 404 que hace lo ...
  #1 (permalink)  
Antiguo 27/12/2002, 22:45
 
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 193
Antigüedad: 22 años, 3 meses
Puntos: 0
problema con la url

hey, tengo este problema y he buscado todas las funciones y no se que hacer:
yo tengo una página de error 404 que hace lo siguiente, toma lo que viene detras del "/" y busca en la base de datos por una fila que coincida que lo envia a una pagina correspondiente:

Código PHP:
<?
$dir 
$REQUEST_URI;

for(
$i=1;$dir[$i]!="";$i++){
$usuario .= $dir[$i];
}
// con esto quito la primer barra de la url erronea

y luego busco en la base


$link 
mysql_connect ("localhost""user""clave");
if (!
$link){
echo (
"Could not connect");
}
mysql_select_db("gentel");
$q mysql_query("select * from users where nick='$usuario'");
if(
mysql_num_rows($q)==1){
header("location: http://www.genteloca.com/base/index.php?x=usuarios&n_autor=$usuario");
}else{
header("location: http://www.genteloca.com");
}
mysql_free_result($q);
mysql_close($link);
?>
el problema es que si pro ejemplo ingreso a:

genteloca.com/´`·.¸¸...pequeña invisible...»»
la pagina de error deberia buscar en la bd por "´`·.¸¸...pequeña invisible...»» " pero el problema es que lo que llega a la pagina es:

/%C2%B4`%C2%B7.%C2%B8%C2%B8...peque%C3%B1a%20invisi ble...%C2%BB%C2%BB

probe con urldecode() y rawurldecode() y lo que mejor que obtube fue:
/´`·.¸¸...pequeña invisible...»»

alguien sabe como hacer que llegue identica y sin simbolos agregados?

por favor! muchisimas gracias desde ya...
__________________
happy coding!:arriba:
  #2 (permalink)  
Antiguo 27/12/2002, 22:55
Avatar de chalito  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago, chile
Mensajes: 221
Antigüedad: 21 años, 3 meses
Puntos: 0
debes tener en cuenta que no todos los caracteres son soportados por todos los sistemas, hay algunos como la ñ en sistemas americanos simplemente no existe, por lo que se reemplazan con esos codigos raros que ves ahi, lo mas sano es dar un nombre mas logico y con caracteres soportados

Saludos
  #3 (permalink)  
Antiguo 27/12/2002, 23:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Podrias probar con el código de ejemplo de php.net sobre uso de urldecode():

Código PHP:
$a explode('&'$QUERY_STRING);
$i 0;
while (
$i count($a)) {
   
$b split('='$a[$i]);
   echo 
'Value for parameter 'htmlspecialchars(urldecode($b[0])),
        
' is 'htmlspecialchars(urldecode($b[1])), "<br />\n";
   
$i++;

Adaptalo a tus necesidades .. como veras usan htmlspecialchars() y urldecode ...

o mejor usa este:
Código PHP:
function crossUrlDecode($source) {
$decodedStr '';
$pos 0;
$len strlen($source);
while (
$pos $len) {
$charAt substr ($source$pos1);
if (
$charAt == 'Ã') {
$char2 substr($source$pos2);
$decodedStr .= htmlentities(utf8_decode($char2),ENT_QUOTES,'ISO-8859-1');
$pos += 2;
}
elseif(
ord($charAt) > 127) {
$decodedStr .= "&#".ord($charAt).";";
$pos++;
}
elseif(
$charAt == '%') {
$pos++;
$hex2 substr($source$pos2);
$dechex chr(hexdec($hex2));
if(
$dechex == 'Ã') {
$pos += 2;
if(
substr($source$pos1) == '%') {
$pos++;
$char2a chr(hexdec(substr($source$pos2)));
$decodedStr .= htmlentities(utf8_decode($dechex $char2a),ENT_QUOTES,'ISO-8859-1');
}
else {
$decodedStr .= htmlentities(utf8_decode($dechex));
}
}
else {
$decodedStr .= $dechex;
}
$pos += 2;
}
else {
$decodedStr .= $charAt;
$pos++;
}
}
return 
$decodedStr;

mas info y creditos del código en los "user coments" de PHP.net funcion urldecode():
http://us.php.net/manual/en/function.urldecode.php

Un saludo,

Última edición por Cluster; 27/12/2002 a las 23:38
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:48.