PHP에서 JavaScript의 encodeURIcomponent에 해당하는 것은 무엇입니까?


답변:


143

시도해보십시오 rawurlencode. 또는 더 정확하게 말하면 :

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

이 기능은 정확하게 작동 하는 방법을 encodeURIComponent정의한다 :

encodeURIComponent 다음을 제외한 모든 문자를 이스케이프합니다. 알파벳, 10 진수, - _ . ! ~ * ' ( )


감사합니다! 기능 없이도 할 수있을 거라 생각했는데 괜찮아요.
Gal

1
@Gal : 동일한 출력이 필요한 경우에만 해당 기능이 필요합니다.
Gumbo

@Gumbo 구글 이미지 검색을위한 파이어 폭스 익스텐션에서 자바 스크립트 encodeURIComponent에 이미지를 전달하는 것을 발견했습니다. addons.mozilla.org/nl/firefox/files/browse/126380/file/chrome/… , 137 행을 참조하십시오 . PHP에서 어떻게 똑같이 할 수 있습니까?
user410932

감사합니다 검보. 도움이되었습니다!
마빈 Thobejane

rawlurlencode가 쉼표를 인코딩한다고 생각하지 않습니다 (URI 구성 요소에 대해 수행해야 함).
Chris Rae

6

해봤 어 urlencode?


2
예. 문제는 완전히 encodeURI가 아니라, 모든 문자를 변환한다는 것입니다.
Gal

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"; } return $ char; }


이것은 switch 문이 유용한 곳입니다
Yada

2
대답의 논리는 저에게 논쟁의 여지가 있습니다. 어쨌든이 경우 IF 또는 SWITCH 체인이 잘 작동하지 않습니다. 이는 색인 배열이 최상의 솔루션이며 조회 값이 핵심 인 일반적인 경우입니다.
yodabar

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.