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).
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;
}
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 "/"
Jawaban:
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
encodeURIComponent
yang didefinisikan :sumber
Apakah kamu sudah mencobanya
urlencode
?sumber
sumber
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)); }
sumber
http_build_query
sumber