web-dev-qa-db-fra.com

Encode l'URL, y compris le trait d'union (-) et le point (.) En php

J'ai besoin de l'URL codée pour le traitement dans l'une des API, mais elle nécessite l'URL codée complète. Par exemple, l'URL de:

http://test.site-raj.co/999999?lpp=1&px2=IjN

doit devenir une URL encodée, comme:

http%3a%2f%test%site%2draj%2eco%2f999999%3flpp%3d1%26px2%3dIjN

J'ai besoin que chaque symbole soit codé, même le point (.) Et le tiret (-) comme ci-dessus.

12
Rajasekar PHP

Essaye ça. Dans une fonction, peut-être si vous l'utilisez plusieurs fois ...

$str = 'http://test.site.co/999999?lpp=1&p---x2=IjN';
$str = urlencode($str);
$str = str_replace('.', '%2E', $str);
$str = str_replace('-', '%2D', $str);
echo $str;
20
Dênis Montone

Cela encodera tous les caractères qui ne sont pas des lettres ou des chiffres simples. Vous pouvez toujours décoder cela avec le code urldecode ou rawurldecode standard:

function urlencodeall($x) {
    $out = '';
    for ($i = 0; isset($x[$i]); $i++) {
        $c = $x[$i];
        if (!ctype_alnum($c)) $c = '%' . sprintf('%02X', ord($c));
        $out .= $c;
    }
    return $out;
}
9
Boann