Problème avec les esperluettes (&)

Eléphanteau du PHP | 17 Messages

04 juil. 2010, 19:32

Bonjour à tous,
Alors voilà, je travaille actuellement sur une sorte de raccourcisseur d'URL, et ce dernier utilise la fonction eregi().

Tout le script fonctionne avec la plupart des URL, mais pas avec les URL de Google Maps, surement à cause des esperluettes (&).
Exemple de lien Google Maps : http://maps.google.fr/maps?f=q&source=s ... eocode=&q=...

Ma fonction est :
if(eregi("/[a-z]{2,4}", $URLlarge)) ...
Je suppose donc qu'il faille que je rajoute l'esperluette (&) à la prise en compte de la fonction eregi().
Oui, mais comment... ?

Si quelqu'un a une idée...
Merci par avance à vous :D
Modifié en dernier par kokoloko10 le 04 juil. 2010, 22:47, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

04 juil. 2010, 20:17

utilise preg a la place de ereg (ereg étant déprécié en 5.3, profite pour prendre de bonne habitude :wink: )

sinon t'attend quoi du /[a-z]{2,4} ?
la il va juste prendre maps

Eléphanteau du PHP | 17 Messages

04 juil. 2010, 22:43

Merci pour ta réponse.

Bah ma fonction avec "/[a-z]{2,4}" fonctionne plutôt bien...
Cette fonction est celle qui récupère l'URL à raccourcir.

Sinon, cela vient peut-être de ma fonction qui raccourci l'URL (?) :
function fshort($URLlarge)
{
	global $length;
	
	$URLshort = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz1234567890'),0,$length);
	$timestamp = time();
	$URLshort = mysql_real_escape_string($URLshort);
   	$insert_query = "INSERT INTO `shorturl` (`URLshort`, `$URLlarge`, `timestamp`) VALUES ('$URLshort', '$URLlarge', NOW() );";
   	$result = mysql_query($insert_query);

	return $URLshort;

}
?>

ViPHP
ViPHP | 5462 Messages

04 juil. 2010, 22:56

la fonction n'est pas bonne, tu risques d'avoir des collision de nom reque du coté de uniqid (plus ta collation mysql en cs):wink:

Eléphanteau du PHP | 17 Messages

04 juil. 2010, 23:07

J'ai fais quelques modifications de noms...
function shorten($fullURL)
{
	global $length;

	$shortURL = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz1234567890'),0,$length);
	$timestamp = time();
	$shortURL = mysql_real_escape_string($shortURL);
   	$insert_query = "INSERT INTO `shorturl` (`shortURL`, `fullURL`, `timestamp`) VALUES ('$shortURL', '$fullURL', NOW() );";
   	$result = mysql_query($insert_query);

	return $shortURL;

}
?>
(PS : Je suis un ultra-débutant, ça se sent... ? :lol: )

ViPHP
ViPHP | 5462 Messages

04 juil. 2010, 23:11

ta pas besoin de rajoute les & a cette endroit la
et $timestamp = time(); ca te sert pas ;)

a quel niveau est ton problème , ca s'écrit mal dans ta base ?

Eléphanteau du PHP | 17 Messages

04 juil. 2010, 23:16

Oui exactement.
Si je demande de raccourcir cette URL :

Code : Tout sélectionner

http://maps.google.fr/maps?f=q&source=s_q&hl=fr&geocode=&q=...
Et bah dans ma base, est seulement écrit :

Code : Tout sélectionner

http://maps.google.fr/maps?f=q
Tu vois ce que je veux dire ?

ViPHP
ViPHP | 5462 Messages

04 juil. 2010, 23:20

Oui exactement.
Si je demande de raccourcir cette URL :

Code : Tout sélectionner

http://maps.google.fr/maps?f=q&source=s_q&hl=fr&geocode=&q=...
Et bah dans ma base, est seulement écrit :

Code : Tout sélectionner

http://maps.google.fr/maps?f=q
Tu vois ce que je veux dire ?

faut faire un escape aussi
$fullURL = mysql_real_escape_string($fullURL);
:wink:

Eléphanteau du PHP | 17 Messages

04 juil. 2010, 23:24

Ahhh, ça doit être ça...
Il y a un endroit particulier pour le placer ?
Quelque chose comme ça ? :
function shorten($fullURL)
{

	global $length;

	
	$shortURL = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz1234567890'),0,$length);
	$timestamp = time();
	$shortURL = mysql_real_escape_string($shortURL);
   	$insert_query = "INSERT INTO `shorturl` (`shortURL`, `fullURL`, `timestamp`) VALUES ('$shortURL', '$fullURL', NOW() );";
   	$result = mysql_query($insert_query);
	$fullURL = mysql_real_escape_string($fullURL);

	return $shortURL;
}

?>

ViPHP
ViPHP | 5462 Messages

04 juil. 2010, 23:32

non avant de definir ta requetes, sinon ca fais pas effet, donc avant ton $insert_query

Eléphanteau du PHP | 17 Messages

04 juil. 2010, 23:37

Ok, merci pour ton aide.

Je vais essayer ça.
Je ne promet rien... :-s

Merci pour ta patience :-)

Eléphanteau du PHP | 17 Messages

04 juil. 2010, 23:51

Bon... Bah je n'ai pas de chance... J'ai essayer ça, mais sans succès :
function shorten($fullURL)
{

        global $length;

        
        $shortURL = substr(str_shuffle('abcdefghijklmnopqrstuvwxyz1234567890'),0,$length);
        $timestamp = time();
        $shortURL = mysql_real_escape_string($shortURL);
        $fullURL = mysql_real_escape_string($fullURL);        
        $insert_query = "INSERT INTO `shorturl` (`shortURL`, `fullURL`, `timestamp`) VALUES ('$shortURL', '$fullURL', NOW() );";
        $result = mysql_query($insert_query);

        return $shortURL;
}
?>
C'est bizarre, toutes les URL fonctionnent, sauf celles contenant un esperluette (&), il ne prend plus en compte à partir du "&"...
Mais qu'ai-je fais de malll ?! :roll:

ViPHP
ViPHP | 5462 Messages

05 juil. 2010, 00:14

fais un
echo $insert_query,
d'ailleurs essaye de voir les erreurs
$result = mysql_query($insert_query) or exit(mysql_error());

Eléphanteau du PHP | 17 Messages

05 juil. 2010, 00:24

Apparemment il n'y a pas d'erreurs.
Tout est correctement généré, comme s'il n'y avait pas d'esperluette...

ViPHP
ViPHP | 5462 Messages

05 juil. 2010, 00:30

Apparemment il n'y a pas d'erreurs.
Tout est correctement généré, comme s'il n'y avait pas d'esperluette...
montre ce que rend echo $insert_query