2012-09-09 4 views
3

Lorsque j'utilise la bibliothèque curl et essayez d'obtenir l'image de l'URL, je reçois 400 erreur de demande incorrecte. J'ai fondé ce problème avec l'URL de codage. Mais dans mon cas ça fonctionne pas, parce que mon URL - c'est chemin vers l'image sur le côté serveur - commeCurl retourne 400 mauvaise demande (URL avec des espaces)

http://example.com/images/products/product 1.jpg 

Je comprends que les espaces utilisateurs dans un fichier nom, il est une mauvaise pratique, mais ce n'est pas mon serveur et non j'ai créé ces fichiers.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, urlencode($url)); 
echo $ret = curl_exec($ch); 

Quand j'utilise la fonction urlencode - Ondulations retour HTTP_CODE = 0

Mise à jour

$url = str_replace(' ', '+', $url); 

ne fonctionne pas, l'erreur retour du serveur 404.

+2

est une telle URL possible (avec de l'espace). L'espace devient '% 20' quand nous tapons l'espace dans l'URL – diEcho

+1

@diEcho quoi? Bien sur, c'est possible. Il ne se transforme pas en% 20 par lui-même - certains clients peuvent le faire, mais certainement pas tous, et ce n'est toujours pas possible. – eis

Répondre

11

Est-ce que cela fonctionne peut-être?

$url = 'http://host/a b.img'; 
$url = str_replace(" ", '%20', $url); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
echo $ret = curl_exec($ch); 
+0

Votre variante fonctionne, merci. – yAnTar

0

Vous ne pouvez pas urlencoder la chaîne entière, car cela va coder les barres obliques et d'autres que vous avez besoin de rester non codé. Si les espaces sont votre seul problème, cela fera:

str_replace(' ', '+', $url); 
+0

Cette variante ne fonctionne pas, erreur de retour du serveur 404. – yAnTar

+0

@yAnTar Quelle est l'URL résultante après 'str_replace'? –

+0

Je voudrais vraiment publier l'URL, mais l'analyseur sur stackoverflow couper les symboles. Je n'a affiché que le nom de fichier réel nom - Michal Dziekan 016-thumb-600x791-188072.jpg Après avoir remplacé - Michal + Dziekan + 016-pouce-600x791-188072.jpg – yAnTar

1

Vous devez utiliser la fonction rawurlencode():

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, rawurlencode($url)); 
echo $ret = curl_exec($ch); 

rawurlencode() doit toujours être préféré. urlencode() est uniquement conservé pour une utilisation antérieure. Pour plus de détails, regardez this SO answer.

Questions connexes