Quel est l'équivalent de l'encodeURIcomponent de JavaScript en PHP?


Réponses:


141

Essayez rawurlencode. Ou pour être plus précis:

function encodeURIComponent($str) {
    $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')');
    return strtr(rawurlencode($str), $revert);
}

Cette fonction fonctionne exactement comme elle encodeURIComponentest définie :

encodeURIComponent échappe tous les caractères sauf les suivants: alphabétiques, chiffres décimaux, - _ . ! ~ * ' ( )


Je vous remercie! Je pensais que je pourrais peut-être le faire sans fonction, mais ok.
Gal

1
@Gal: Vous n'aurez besoin de cette fonction que si vous avez besoin d'une sortie identique.
Gumbo

@Gumbo Dans l'extension Firefox pour la recherche d'images Google, je remarque qu'ils transmettent une image au javascript encodeURIComponent. Voir addons.mozilla.org/nl/firefox/files/browse/126380/file/chrome/… , ligne 137. Comment pourrais-je faire la même chose en PHP?
user410932

Merci Gumbo. Cela a été utile!
Marvin Thobejane

Je ne crois pas que rawlurlencode encode des virgules (ce qui doit être fait pour les composants URI).
Chris Rae

6

Avez-vous essayé urlencode?


1
Oui. le problème est que ce n'est pas tout à fait comme encodeURI, il convertit tous les caractères, même ^ je voulais quelque chose qui fonctionnerait exactement de la même manière sans que j'aie à intervenir ^^.
Gal

2

function encodeURIComponent ($ string) {
   $ result = "";
   pour ($ i = 0; $ i <strlen ($ string); $ i ++) {
      $ result. = encodeURIComponentbycharacter (urlencode ($ string [$ i]));
   }
   return $ result;
}

function encodeURIComponentbycharacter ($ char) { if ($ char == "+") {return "% 20"; } if ($ char == "% 21") {return "!"; } if ($ char == "% 27") {return '"';} if ($ char == "% 28") {return "(";} if ($ char == "% 29") {return ")"; } if ($ char == "% 2A") {return "*"; } if ($ char == "% 7E") {return "~"; } if ($ char == "% 80") {retourne "% E2% 82% AC"; } if ($ char == "% 81") {return "% C2% 81"; } if ($ char == "% 82") {return "% E2% 80% 9A"; } if ($ char == "% 83") {return "% C6% 92"; } if ($ char == "% 84") {return "% E2% 80% 9E"; } if ($ char == "% 85") {retourne "% E2% 80% A6"; } if ($ char == "% 86") {retourne "% E2% 80% A0"; } if ($ char == "% 87") {return "% E2% 80% A1"; } if ($ char == "% 88") {return "% CB% 86"; } if ($ char == "% 89") {return "% E2% 80% B0"; } if ($ char == "% 8A") {retourne "% C5% A0"; } if ($ char == "% 8B") {retourne "% E2% 80% B9"; } if ($ char == "% 8C") {retourne "% C5% 92"; } if ($ char == "% 8D") {retourne "% C2% 8D"; } if ($ char == "% 8E") {retourne "% C5% BD"; } if ($ char == "% 8F") {retourne "% C2% 8F"; } if ($ char == "% 90") {return "% C2% 90"; } if ($ char == "% 91") {return "% E2% 80% 98"; } if ($ char == "% 92") {return "% E2% 80% 99"; } if ($ char == "% 93") {retourne "% E2% 80% 9C"; } if ($ char == "% 94") {retourne "% E2% 80% 9D"; } if ($ char == "% 95") {retourne "% E2% 80% A2"; } if ($ char == "% 96") {return "% E2% 80% 93"; } if ($ char == "% 97") {return "% E2% 80% 94"; } if ($ char == "% 98") {retourne "% CB% 9C"; } if ($ char == "% 99") {retourne "% E2% 84% A2"; } if ($ char == "% 9A") {retourne "% C5% A1"; } if ($ char == "% 9B") {retourne "% E2% 80% BA"; } if ($ char == "% 9C") {retourne "% C5% 93"; } if ($ char == "% 9D") {retourne "% C2% 9D"; } if ($ char == "% 9E") {retourne "% C5% BE"; } if ($ char == "% 9F") {retourne "% C5% B8"; } if ($ char == "% A0") {retourne "% C2% A0"; } if ($ char == "% A1") {return "% C2% A1"; } if ($ char == "% A2") {retourne "% C2% A2"; } if ($ char == "% A3") {return "% C2% A3"; } if ($ char == "% A4") {retourne "% C2% A4"; } if ($ char == "% A5") {retourne "% C2% A5"; } if ($ char == "% A6") {retourne "% C2% A6"; } if ($ char == "% A7") {retourne "% C2% A7"; } if ($ char == "% A8") {return "% C2% A8"; } if ($ char == "% A9") {retourne "% C2% A9"; } if ($ char == "% AA") {return "% C2% AA"; } if ($ char == "% AB") {retourne "% C2% AB"; } if ($ char == "% AC") {return "% C2% AC"; } if ($ char == "% AD") {return "% C2% AD"; } if ($ char == "% AE") {retourne "% C2% AE"; } if ($ char == "% AF") {return "% C2% AF"; } if ($ char == "% B0") {retourne "% C2% B0"; } if ($ char == "% B1") {return "% C2% B1"; } if ($ char == "% B2") {return "% C2% B2"; } if ($ char == "% B3") {retourne "% C2% B3"; } if ($ char == "% B4") {retourne "% C2% B4"; } if ($ char == "% B5") {return "% C2% B5"; } if ($ char == "% B6") {retourne "% C2% B6"; } if ($ char == "% B7") {retourne "% C2% B7"; } if ($ char == "% B8") {retourne "% C2% B8"; } if ($ char == "% B9") {retourne "% C2% B9"; } if ($ char == "% BA") {return "% C2% BA"; } if ($ char == "% BB") {return "% C2% BB"; } if ($ char == "% BC") {return "% C2% BC"; } if ($ char == "% BD") {return "% C2% BD"; } if ($ char == "% BE") {return "% C2% BE"; } if ($ char == "% BF") {retourne "% C2% BF"; } if ($ char == "% C0") {retourne "% C3% 80"; } if ($ char == "% C1") {retourne "% C3% 81"; } if ($ char == "% C2") {retourne "% C3% 82"; } if ($ char == "% C3") {retourne "% C3% 83"; } if ($ char == "% C4") {retourne "% C3% 84"; } if ($ char == "% C5") {retourne "% C3% 85"; } if ($ char == "% C6") {retourne "% C3% 86"; } if ($ char == "% C7") {retourne "% C3% 87"; } if ($ char == "% C8") {retourne "% C3% 88"; } if ($ char == "% C9") {retourne "% C3% 89"; } if ($ char == "% CA") {return "% C3% 8A"; } if ($ char == "% CB") {retourne "% C3% 8B"; } if ($ char == "% CC") {retourne "% C3% 8C"; } if ($ char == "% CD") {retourne "% C3% 8D"; } if ($ char == "% CE") {retourne "% C3% 8E"; } if ($ char == "% CF") {return "% C3% 8F"; } if ($ char == "% D0") {retourne "% C3% 90"; } if ($ char == "% D1") {retourne "% C3% 91"; } if ($ char == "% D2") {retourne "% C3% 92"; } if ($ char == "% D3") {retourne "% C3% 93"; } if ($ char == "% D4") {retourne "% C3% 94"; } if ($ char == "% D5") {retourne "% C3% 95"; } if ($ char == "% D6") {retourne "% C3% 96"; } if ($ char == "% D7") {retourne "% C3% 97"; } if ($ char == "% D8") {retourne "% C3% 98"; } if ($ char == "% D9") {retourne "% C3% 99"; } if ($ char == "% DA") {retourne "% C3% 9A"; } if ($ char == "% DB") {retourne "% C3% 9B"; } if ($ char == "% DC") {return "% C3% 9C"; } if ($ char == "% DD") {return "% C3% 9D"; } if ($ char == "% DE") {return "% C3% 9E"; } if ($ char == "% DF") {retourne "% C3% 9F"; } if ($ char == "% E0") {retourne "% C3% A0"; } if ($ char == "% E1") {retourne "% C3% A1"; } if ($ char == "% E2") {retourne "% C3% A2"; } if ($ char == "% E3") {retourne "% C3% A3"; } if ($ char == "% E4") {retourne "% C3% A4"; } if ($ char == "% E5") {retourne "% C3% A5"; } if ($ char == "% E6") {retourne "% C3% A6"; } if ($ char == "% E7") {retourne "% C3% A7"; } if ($ char == "% E8") {retourne "% C3% A8"; } if ($ char == "% E9") {retourne "% C3% A9"; } if ($ char == "% EA") {return "% C3% AA"; } if ($ char == "% EB") {return "% C3% AB"; } if ($ char == "% EC") {return "% C3% AC"; } if ($ char == "% ED") {return "% C3% AD"; } if ($ char == "% EE") {retourne "% C3% AE"; } if ($ char == "% EF") {return "% C3% AF"; } if ($ char == "% F0") {retourne "% C3% B0"; } if ($ char == "% F1") {retourne "% C3% B1"; } if ($ char == "% F2") {return "% C3% B2"; } if ($ char == "% F3") {retourne "% C3% B3"; } if ($ char == "% F4") {retourne "% C3% B4"; } if ($ char == "% F5") {retourne "% C3% B5"; } if ($ char == "% F6") {retourne "% C3% B6"; } if ($ char == "% F7") {retourne "% C3% B7"; } if ($ char == "% F8") {retourne "% C3% B8"; } if ($ char == "% F9") {retourne "% C3% B9"; } if ($ char == "% FA") {return "% C3% BA"; } if ($ char == "% FB") {return "% C3% BB"; } if ($ char == "% FC") {return "% C3% BC"; } if ($ char == "% FD") {return "% C3% BD"; } if ($ char == "% FE") {return "% C3% BE"; } if ($ char == "% FF") {retourne "% C3% BF"; } return $ char; }


C'est là qu'une instruction switch est utile
Yada

2
La logique de la réponse est discutable pour moi, de toute façon ni les chaînes IF ou SWITCH ne fonctionnent bien dans ce cas. Il s'agit d'un cas typique dans lequel un tableau indexé est la meilleure solution, où la valeur de recherche est la clé.
Emanuele Del Grande

0

comment est ce code?
J'ai encodé chaque niveau.
en fait, ce n'est pas la même chose que encodeURI, mais vous pouvez encoder mais le nom d'hôte et "/"

function encodeURI($url) {
    if(__empty($url))return $url; 

    $res = preg_match('/.*:\/\/(.*?)\//',$url,$matches);
    if($res){

        // except host name
        $url_tmp = str_replace($matches[0],"",$url);

        // except query parameter
        $url_tmp_arr = explode("?",$url_tmp);

        // encode each tier
        $url_tear = explode("/", $url_tmp_arr[0]);
        foreach ($url_tear as $key => $tear){
            $url_tear[$key] = rawurlencode($tear);
        }

        $ret_url = $matches[0].implode('/',$url_tear);

        // encode query parameter
        if(count($url_tmp_arr) >= 2){
            $ret_url .= "?".$this->encodeURISub($url_tmp_arr[1]);
        }
        return $ret_url;
    }else{
        return $this->encodeURISub($url);
    }

}

/**
 * /programming/4929584/encodeuri-in-php/6059053
 */
function encodeURISub($url) {
    // http://php.net/manual/en/function.rawurlencode.php
    // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURI
    $unescaped = array(
    '%2D'=>'-','%5F'=>'_','%2E'=>'.','%21'=>'!', '%7E'=>'~',
    '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')'
            );
    $reserved = array(
            '%3B'=>';','%2C'=>',','%2F'=>'/','%3F'=>'?','%3A'=>':',
            '%40'=>'@','%26'=>'&','%3D'=>'=','%24'=>'$'
    );
    $score = array(
            '%23'=>'#'
    );
    return strtr(rawurlencode($url), array_merge($reserved,$unescaped,$score));

}

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.