Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Curl nie działa gdy w linku jest apostrof
Forum PHP.pl > Forum > Przedszkole
mefistofeles
W $url jest link tego typu:

  1. $url='http://www.domena.pl/i'am_bad
  2.  
  3. $ch_e=curl_init($url);
  4. define('USER_AGENT', 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.0.6');
  5. curl_setopt($ch_e, CURLOPT_RETURNTRANSFER, 1);
  6. curl_setopt($ch_e, CURLOPT_FOLLOWLOCATION, 1);
  7. curl_setopt($ch_e, CURLOPT_USERAGENT, USER_AGENT);
  8. curl_setopt($ch_e, CURLOPT_SSL_VERIFYPEER, FALSE);
  9. curl_setopt($ch_e, CURLOPT_SSL_VERIFYHOST, 2);
  10. curl_setopt($ch_e, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
  11. curl_setopt($ch_e, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
  12. $nazwa=curl_exec($ch_e);
  13. var_dump($nazwa);

Z przeglądarki ten adres działa, ale curl zwraca mi stronę z błędem 404.
Jak pozbyć się problemu z apostrofami w linkach?
Jakies escapowanie ?
pedro84
To Ci powinno działać:

  1. $url='http://www.domena.pl/i\'am_bad';
mefistofeles
Rzeczywiście taki link działa, tylko teraz mam problem z zamienieniem ' na \'
Nie wiem czemu żadna z tych 2 opcji nie działa:

  1. $url = str_replace("'", "\'", $url);
  2.  
  3. $url = addslashes($url);


questionmark.gif
Pawel_W
człowieku, po co ty chcesz to zamieniać?

jeżeli adres jest zawsze taki sam to "wyeskejpuj" te apostrofy, a jeżeli nie to nie musisz nic robić...
mefistofeles
Napisałem po co chce to zamieniać.
Jak jest apostrof w linku to nie działa curl, jak go zamienie na sztywno na \' już jest ok, ale link jest zawsze inny
i chce zamić wszystkie ewentualne wystąpienia apostrofu na \' gdyż tylko wtedy działa ten skrypt, jednak nie wiem jak to zrobić.
luck
  1. $url = "http://www.domena.pl/i'am_bad";
  2. $url = addslashes($url);
  3. echo $url;
To Ci nie może nie działać. Sprawdź 3 razy, czy na pewno używasz addslashes() dokładnie w ten sposób.
mefistofeles
Używam tego dokładnie w ten sposób.
echo wyświetla mi dokładnie taki sam link jak pierwotny i curl sobie z nim nie radzi :/
luck
Może wcześniej zmienna $url została potraktowana funkcją typu htmlentities? Sprawdź w źródle strony (w przeglądarce) czy cudzysłów wyświetla się tak jak tego chcesz.
mefistofeles
Nie używam htmlenties, ale w źródle po zastosowaniu adslashes rzeczywiście zamiast \' jest encja: & # 39;
Dlaczego ?
luck
Nie wiem dlaczego, ale skoro już tak jest to możesz najpierw przepuścić zmienną przez html_entity_decode.
mefistofeles
  1. $url = addslashes($url);
  2. $url = html_entity_decode($url);


Nic to nie zmieniło, ciągle są encje ...
Pawel_W
od myślenia głowa nie boli...
  1. $url = html_entity_decode($url);
  2. $url = addslashes($url);
mefistofeles
Dzięki za zaangażowanie, ale nic a nic to nie zmieniło niestety :/
Co za dziwna anomalia...
pedro84
A możesz wrzucić cały plik? Może więcej kodu coś pokaże.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.