да. проблема в том, что это не совсем похоже на encodeURI, он конвертирует каждый символ, даже ^ Я хотел что-то, что работало бы точно так же, без моего вмешательства ^^.
Gal
2
функция encodeURIComponent ($ строка) {
$ result = "";
for ($ i = 0; $ i <strlen ($ string); $ i ++) {
$ result. = encodeURIComponentbycharacter (urlencode ($ string [$ i]));
}
вернуть результат $;
}
Логика ответа для меня спорна, в любом случае ни IF, ни SWITCH цепочки не работают в этом случае. Это типичный случай, когда индексированный массив является лучшим решением, где значение поиска является ключом.
yodabar
0
как этот код?
Я закодировал каждый уровень.
на самом деле это не то же самое, что encodeURI, но вы можете кодировать, но имя хоста и "/"
Ответы:
Попробуй
rawurlencode
. А точнее:function encodeURIComponent($str) { $revert = array('%21'=>'!', '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')'); return strtr(rawurlencode($str), $revert); }
Эта функция работает точно так, как
encodeURIComponent
определено :источник
Вы пробовали
urlencode
?источник
источник
как этот код?
Я закодировал каждый уровень.
на самом деле это не то же самое, что 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)); }
источник
http_build_query
источник