Dziękuję Ci! Pomyślałem, że mógłbym to zrobić bez funkcji, ale ok.
Gal
1
@Gal: Będziesz potrzebował tej funkcji tylko wtedy, gdy potrzebujesz identycznego wyjścia.
Gumbo
@Gumbo W rozszerzeniu firefox dla wyszukiwarki grafiki Google zauważyłem, że przekazują one obraz do komponentu encodeURIComponent javascript. Zobacz addons.mozilla.org/nl/firefox/files/browse/126380/file/chrome/… , wiersz 137. Jak mogę zrobić to samo w PHP?
user410932
Dzięki Gumbo. To było pomocne!
Marvin Thobejane
Nie wierzę, że rawlurlencode koduje przecinki (co należy zrobić dla składników URI).
tak. problem polega na tym, że nie jest to do końca jak encodeURI, konwertuje każdy znak, nawet ^ Chciałem czegoś, co działałoby dokładnie tak samo bez konieczności interwencji ^^.
Gal
2
function encodeURIComponent ($ string) {
$ wynik = "";
for ($ i = 0; $ i <strlen ($ string); $ i ++) {
$ result. = encodeURIComponentbycharacter (urlencode ($ string [$ i]));
}
zwraca $ wynik;
}
W tym miejscu przydaje się instrukcja przełączania
Yada
2
Logika odpowiedzi jest dla mnie dyskusyjna, w każdym razie ani łańcuch IF, ani SWITCH nie działają dobrze w tym przypadku. Jest to typowy przypadek, w którym tablica indeksowana jest najlepszym rozwiązaniem, w którym kluczem jest wartość wyszukiwania.
yodabar
0
jak to jest kod?
Zakodowałem każdy poziom.
właściwie to nie to samo co encodeURI, ale możesz kodować tylko nazwę hosta i „/”
Odpowiedzi:
Spróbuj
rawurlencode
. A dokładniej:function encodeURIComponent($str) { $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')'); return strtr(rawurlencode($str), $revert); }
Ta funkcja działa dokładnie tak
encodeURIComponent
, jak została zdefiniowana :źródło
Próbowałeś
urlencode
?źródło
źródło
jak to jest kod?
Zakodowałem każdy poziom.
właściwie to nie to samo co encodeURI, ale możesz kodować tylko nazwę hosta i „/”
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)); }
źródło
http_build_query
źródło