PHPでJavaScriptのencodeURIcomponentに相当するものは何ですか?


回答:


141

お試しくださいrawurlencode。またはもっと正確に言うと:

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

この関数は、どのようencodeURIComponentに定義されているかを正確に機能します。

encodeURIComponent 次を除くすべての文字をエスケープします:アルファベット、10進数、 - _ . ! ~ * ' ( )


ありがとうございました!機能がなくてもできると思いましたが、大丈夫です。
ギャル

1
@Gal:同じ出力が必要な場合にのみ、その関数が必要になります。
ガンボ

@Gumbo Google画像検索のFirefoxの拡張機能で、JavaScriptのencodeURIComponentに画像を渡しています。addons.mozilla.org/nl/firefox/files/browse/126380/file/chrome/…、137行目を参照してください。PHPで同じようにするにはどうすればよいですか?
user410932

ガンボに感謝します。それは役に立ちました!
Marvin Thobejane 2013年

rawlurlencodeがコンマをエンコードするとは思いません(これはURIコンポーネントで行う必要があります)。
Chris Rae

6

やってみましたurlencodeか?


1
はい。問題は、それが完全にencodeURIのようではなく、すべての文字を変換することです。^介入しなくてもまったく同じように機能するものを必要としていました^^。
ギャル

2

function encodeURIComponent($ string){
   $ result = "";
   for($ i = 0; $ i <strlen($ string); $ i ++){
      $ result。= encodeURIComponentbycharacter(urlencode($ string [$ i]));
   }
   $ 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"){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"; } $ charを返す; }


ここで、switchステートメントが役に立ちます
Yada

2
答えの論理は私には議論の余地があります。とにかく、この場合、IFチェーンもSWITCHチェーンもうまく機能しません。これは、インデックス付き配列が最適なソリューションであり、ルックアップ値がキーである典型的なケースです。
Emanuele Del Grande

0

このコードはどうですか?
各層をエンコードしました。
実際にはそれはencodeURIと同じではありませんが、ホスト名と「/」はエンコードできます

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

}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.