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, - _ . ! ~ * ' ( )

Gombo
la source
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?

rochal
la source
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; }

Catwashere
la source
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));

}
harufumi.abe
la source
-2

http_build_query

Josh Ribakoff
la source
Comment cela répond-il à la question?
indextwo