Появление кириллических символов в интернете, несомненно, способствует развитию интернета. Однако, если взглянуть глазами разработчика, то символы кириллицы, иногда, могут добавить хлопот. Один из таких случаев — работа со ссылками в PHP. Пока дело касается файлов с именами на латинице все работает прекрасно, но если в имени файла встречаются кириллические знаки, то перестают работать ряд функций, например, функция copy если попытаться скопировать файл.
Казалось бы на помощь должна прийти функция PHP urlencode. Но это не совсем так. Данная функция будет кодировать и слеши и другие символы, которые кодировать не требуется.
Рассмотрим как можно закодировать только русские символы в URL. Для перекодировки будем использовать функцию preg_replace_callback, а в колбэке функцию urlencode.
$from="https://надосайт.рф/любой русский URL.html"; $from=preg_replace_callback("/([а-я]+)/iu",function ($matches) { return urlencode($matches[0]); },$from); $from=str_replace(' ',"%20",$from); copy($from,$to);
Дополнительно преобразуем пробел функцией str_replace, поскольку результат функции urlencode для пробела не совсем подходит в нашем случае.