Проблема со слагами WordPress для нелатинских символов

8 мая 2012 г., 14:51:18
Просмотры: 30.3K
Голосов: 11

Я использую пермалинки в WordPress в формате: domain.com/category/post_name

Проблема в том, что названия постов содержат нелатинские символы, такие как китайские, иврит и арабские. В результате они кодируются в формат вида: %20%18%6b%20, где каждый закодированный символ считается как отдельный символ, что приводит к увеличению длины в 3 раза, из-за чего даже короткие слаги обрезаются.

Как это исправить? Или как хотя бы увеличить лимит длины? Я пытался увеличить длину поля "post_name" в базе данных с 200 до 500, но слаги всё равно обрезаются.

3
Комментарии

Возможно, этот плагин может быть полезен в качестве отправной точки для решения проблемы: http://wordpress.org/extend/plugins/mzslugs-translator/ - Я не публикую это как ответ, так как не тестировал и не анализировал код (по крайней мере, это не старый плагин).

brasofilo brasofilo
10 мая 2012 г. 20:26:53

Какую версию WordPress вы используете и что у вас в файле htaccess. Пермалинки с 2-байтовыми символами должны нормально работать в последних версиях.

Sean Lee Sean Lee
12 мая 2012 г. 01:04:54

Убедитесь, что ваш сервер, PHP и база данных настроены на использование кодировки UTF8.

Steve Buzonas Steve Buzonas
14 мая 2012 г. 10:14:18
Все ответы на вопрос 2
0
11

Постоянные ссылки вида http://example/שָׁלוֹם действительно работают в моем WordPress 3.3. Это может быть связано с улучшениями функции remove_accents() для интернационализации постоянных ссылок.

Как отметили Шон и Стив:

  • убедитесь, что используете WordPress версии ≥ 3.3
  • убедитесь, что ваш файл .htaccess содержит правило, подобное RewriteRule . /index.php [L]
  • проверьте, что ваша база данных использует кодировку UTF-8 (и рассмотрите возможность перехода на UTF-8, если это не так).

[Мой оригинальный ответ, который сейчас менее актуален, но, возможно, все еще полезен:]

Смотрите:

Если заголовки ваших записей содержат некоторые ASCII-символы, вы можете удалить не-ASCII символы при генерации ярлыков записей.

Некоторые плагины могут помочь:

  • http://wordpress.org/extend/plugins/strings-sanitizer/

    Агрессивно очищает заголовки для создания чистых, SEO-дружественных ярлыков записей и имен файлов при загрузке. Работает путем преобразования распространенных акцентированных символов UTF-8, а также некоторых специальных символов кириллицы, иврита, испанского и немецкого языков.

  • http://wordpress.org/extend/plugins/universal-slugs/

    [...] если вы говорите на языке, который использует символы, не входящие в английский алфавит, то вам приходится мириться с громоздкими, странно выглядящими постоянными ссылками или вручную обновлять каждую из них при создании записи или страницы. [...] Плагин также удаляет из URL-адресов распространенные слова, такие как "and", "και", "το", "the" и т.д., поскольку они лишь увеличивают длину URL, не добавляя ничего к смыслу или SEO-ценности.

  • http://wordpress.org/extend/plugins/pinyin-slug/

    Например, когда вы публикуете запись с заголовком "Chinese PinYin", WordPress автоматически назначает длинное имя файла для вашей записи, называемое ярлыком: /%e4%b8%ad%e6%96%87%e6%8b%bc%e9%9f%b3 [...] С активированным плагином Chinese PinYin, ярлык для нашего примера будет выглядеть так: /zhongwenpinyin

  • http://wordpress.org/extend/plugins/remove-utf-8-from-slug/

    удаляет все UTF-8 символы из заголовка при создании постоянной ссылки

  • http://wordpress.org/extend/plugins/pinyin-seo/

    Преобразует китайские иероглифы в ярлыки на основе пиньиня.

Также, некоторые многоязычные плагины могут автоматически переводить ваши ярлыки на английский (и, следовательно, использовать только латинские символы), но я не использовал ни один из них, поэтому не уверен.

10 мая 2012 г. 23:04:39
1

Помимо санитизации, единственный способ увеличить длину слага — это модификация кода WordPress.

В файле wp-includes/formatting.php:

замените значение 200 на нужное:

$title = utf8_uri_encode($title, 200);

В файле: wp-includes/post.php найдите 3 строки с:

$alt_post_name = substr( $slug, 0, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix";

Проблема будет преследовать вас с каждым обновлением WordPress

10 мая 2012 г. 23:42:44
Комментарии

Да, хотя это "исправление" решает проблему, никогда не стоит рекомендовать изменения ядра, так как большинство пользователей WP не понимают, как файлы заменяются во время обновлений.

Q Studio Q Studio
30 дек. 2020 г. 11:10:17