2012-06-04 3 views
-1

Вместо того чтобы делать этоПростой способ полностью декодировать эту строку?

urldecode(urldecode(urldecode(curl_exec($ch)))); 

Выход из curl_exec кодируется более чем один раз, есть способ, которым я могу расшифровать его полностью только с одним вызовом функции?

Я просто написал эту функцию, и она прекрасно работает

function decodeSource($encodedSource){ 
    while($encodedSource != urldecode($encodedSource)){ 
     $encodedSource = urldecode($encodedSource); 
    } 
return $encodedSource; 
} 
+0

«Результат curl_exec кодируется более одного раза» --- кем? – zerkms

+2

И ... как бы такая функция декодирования знала, сколько раз повторять свой urldecode()? – ghoti

+0

Я загружаю веб-страницу с помощью расширения cURL, curl_exec() возвращает источник веб-страницы, а веб-страница закодирована и имеет \ u0026amp; а также, что я хотел бы декодировать – CLUEL3SS

ответ

1

Что об использовании собственной функции?

function multiurldecode($url, $count=1) { 
    for($i=1; $i<=$count; $i++) 
    $url=urldecode($url); 
    return($url); 
} 

Это у верхней части моей головы, непроверенный ....

UPDATE на комментарий:

Не плохая идея на всех! Вот он в коде.

function multiurldecode($url, $count=1) { 
    if ($count==0) { 
    for($last=urldecode($url); $last!=$url; $url=urldecode($url)) 
     $last=$url; 
    } else { 
    for ($i=1; $i<=$count; $i++) 
     $url=urldecode($url); 
    } 
    return($url); 
} 

Опять же, я не проверял это, но он отлично работает в моей голове. :) Идея здесь заключается в том, что если вы обеспечиваете счетчик нуля, цикл for будет продолжать работать до тех пор, пока декодированный URL-адрес не станет таким же, как его источник.

+1

Вы можете добавить проверку, чтобы увидеть, отличается ли строка от декодированной строки ... И затем остановитесь, когда они будут одинаковыми. –

+1

Да, но это может зайти слишком далеко. Что, если строка, которую вы * хотите *, является вторым последним urlencode? Я думаю, нам нужна дополнительная информация от ОП. – ghoti

+0

+1 для инновационного использования цикла for! – Graham