Всем здравствуйте!
Перенес сайт на wordpress на другой хостинг. Перенес домен, залил дамп базы, скопировал файлы, поправил wp-config.php. Сайт поднялся без проблем.
В wordpress был установлен плагин Cyr To Lat, соответственно все файлы в uploads поименованы латиницей. Однако есть очень много файлов с символом "№". На предыдущем хостинге URL таких файлов кодировался в ANSI (т.е. из отображаемой ссылки вида "*/dokument№1.pdf" символ "№" преобразовывался в "%B9" и получалась ссылка вида "*/dokument%B91.pdf"). На новом хостинге URL преобразуется в UTF-8, где символ "№" преобразуется в %E2%84%96 и ссылка получается вида "*/dokument%E2%84%961.pdf".
Все ссылки на файлы с символом № в URL возвращают 404.
Если в ссылке руками поправить № на %B9 - документ скачается.
База данных на старом хостинге в UTF-8, на новом тоже. Не пониманию в каком месте указывается кодировка URL.
Подскажите как победить этот "№"?
Не пониманию в каком месте указывается кодировка URL.
Вообще, url кодируется по спецификации RFC 3986. То что вы можете подставить некорректные символы в адрес и все-равно попасть на нужный ресурс - это целиком забота браузера, он принудительно перекодирует строку.
В принципе, нужно было решать проблему заранее, чтобы такие символы не записывались.
Теперь вам придется мучится с регулярными выражениями, чтобы вычленить атрибут href из текста постов и провести замену символов только в этом атрибуте, не задев основной текст постов.
Не возьмусь утверждать со 100%-й уверенностью в вашем случае, но проблемы со ссылками на файлы, например, темы могут возникать при неправильном переносе.
Современный вордпресс уже просто так между хостами лучше не таскать. Рекомендуют плагины наподобие Duplicator и WP All-in-one Migration. Они корректно работают с сериализованными данными в базе, что позволяет избежать ошибок в т.ч. с путями.