JavaScript'in encodeURI bileşeninin PHP'deki karşılığı nedir?


Yanıtlar:


143

Deneyin rawurlencode. Veya daha kesin olmak gerekirse:

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

Bu fonksiyon tam olarak çalıştığını nasıl encodeURIComponenttanımlanır :

encodeURIComponent aşağıdakiler dışındaki tüm karakterlerden kaçar: alfabetik, ondalık basamaklar, - _ . ! ~ * ' ( )


Teşekkür ederim! Bunu bir işlev olmadan yapabileceğimi düşündüm, ama tamam.
Gal

1
@Gal: Bu işleve yalnızca aynı çıktıya ihtiyacınız varsa ihtiyacınız olacak.
Gumbo

@Gumbo Google Görsel araması için firefox uzantısında, javascript encodeURIComponent'e bir resim ilettiklerini fark ettim. Addons.mozilla.org/nl/firefox/files/browse/126380/file/chrome/… , satır 137'ye bakın . Aynısını PHP'de nasıl yapabilirim?
user410932

Teşekkürler Gumbo. Bu yardımcı oldu!
Marvin Thobejane

Rawlurlencode'un virgül kodladığına inanmıyorum (URI bileşenleri için yapılması gereken).
Chris Rae

6

Denedin urlencodemi


2
Evet. sorun şu ki, tamamen encodeURI gibi değil, her karakteri dönüştürüyor, hatta ^ ben müdahale etmek zorunda kalmadan aynı şekilde işleyecek bir şey istedim ^^.
Gal

2

function encodeURIComponent ($ dize) {
   $ sonuç = "";
   for ($ i = 0; $ i <strlen ($ string); $ i ++) {
      $ sonuç. = encodeURIComponentbycharacter (urlencode ($ string [$ i]));
   }
   $ sonuç döndür;
}

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


Bu, bir anahtar ifadesinin
işe yaradığı

2
Cevabın mantığı benim için tartışılabilir, yine de ne IF ne de SWITCH zincirleri bu durumda iyi performans göstermiyor. Bu, arama değerinin anahtar olduğu, dizinlenmiş dizinin en iyi çözüm olduğu tipik bir durumdur.
yodabar

0

bu kod nasıl?
Her katmanı kodladım.
aslında encodeURI ile aynı değildir, ancak kodlayabilirsiniz ancak ana bilgisayar adı ve "/"

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));

}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.