Apa yang setara dengan encodeURIcomponent JavaScript di PHP?

Jawaban:

143

Coba rawurlencode. Atau lebih tepatnya:

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

Fungsi ini bekerja persis seperti encodeURIComponentyang didefinisikan :

encodeURIComponent lolos dari semua karakter kecuali berikut ini: abjad, angka desimal, - _ . ! ~ * ' ( )

Gumbo
sumber
Terima kasih! Saya pikir saya mungkin bisa melakukannya tanpa fungsi, tapi oke.
Gal
1
@ Gal: Anda hanya membutuhkan fungsi itu jika Anda membutuhkan keluaran yang identik.
Gumbo
@Gumbo Dalam ekstensi firefox untuk pencarian Gambar Google, saya perhatikan bahwa mereka meneruskan gambar ke javascript encodeURIComponent. Lihat addons.mozilla.org/nl/firefox/files/browse/126380/file/chrome/… , baris 137. Bagaimana saya bisa melakukan hal yang sama di PHP?
pengguna410932
Terima kasih Gumbo. Itu sangat membantu!
Marvin Thobejane
Saya tidak percaya rawlurlencode menyandikan koma (yang perlu dilakukan untuk komponen URI).
Chris Rae
6

Apakah kamu sudah mencobanya urlencode?

rochal
sumber
2
Iya. masalahnya adalah ini tidak sepenuhnya seperti encodeURI, itu mengubah setiap karakter, bahkan ^ Saya ingin sesuatu yang akan berfungsi dengan cara yang persis sama tanpa saya harus campur tangan ^^.
Gal
2

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

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

Catwashere
sumber
Di sinilah pernyataan sakelar berguna
Yada
2
Logika jawabannya bisa diperdebatkan bagi saya, bagaimanapun juga rantai IF atau SWITCH tidak bekerja dengan baik dalam kasus ini. Ini adalah kasus umum di mana larik yang diindeks adalah solusi terbaik, dengan nilai pencarian adalah kuncinya.
yodabar
0

bagaimana kode ini?
Saya mengkodekan setiap tingkatan.
sebenarnya tidak sama dengan encodeURI, tetapi Anda dapat menyandikan tetapi nama host dan "/"

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
sumber
-2

http_build_query

Josh Ribakoff
sumber
Bagaimana ini menjawab pertanyaan?
dua