Данные способ универсальный, так как конвертирует каждую букву, изначально проверяя ее на соответствие кириллице. У вас не возникнет проблем с конвертацией символов «/» и «:»
Ниже представлены 2 функции, которые выполняют кодирование строки(в нашем случае url какой-то веб-страницы):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/** * Проверка адреса на русские символы * @param string $url * @return bool */ function checkToRuSymbols($url) { if (preg_match( '/\p{Cyrillic}/u', $url )) { return true; } return false; } /** * Кодирование в правильный формат url адреса, если есть РУ символы * @param string $url * @return string */ function urlEncodeRuSymbols($url) { $url_symbols = preg_split('//u', $url, -1, PREG_SPLIT_NO_EMPTY); $new_url_symbols = array(); array_walk($url_symbols, function ($value) { if(checkToRuSymbols($value)) { $value = urlencode($value); } array_push($new_url_symbols, $value); }); return implode($new_url_symbols); } |
Работает следующим образом:
1 2 3 |
$url = 'https://ufa-all.ru/music/?search_text=Красивая'; $good_url = urlEncodeRuSymbols($url); echo $good_url; |
Данная функция вам может понадобится при использовании curl, так как curl не умеет обращаться по адресам, в которых пристутствуют незакодированные символы формата Cyrillic