Специальные символы в WordPress UTF-8

8 янв. 2012 г., 06:00:51
Просмотры: 18.6K
Голосов: 5

У меня проблема со специальными символами, которые отображаются некорректно на фронтенде. В основном они преобразуются в знаки вопроса или что-то вроде �?

Пример - Frédèric становится Fr�d�ric.

Некоторые факты, которые меня озадачили:

  • Этот WordPress установлен на ЛОКАЛЬНОЙ машине и делит сервер как минимум с 40 другими установками — ни у одной из которых нет этой проблемы.

  • Эта установка WordPress также использует ту же базу данных, что и другие.

  • Мой файл wp-config имеет определенные кодировку и collate.

  • База данных в порядке, потому что когда я просматриваю запись в РЕДАКТОРЕ (бэкенде) — всё корректно, проблема только на ФРОНТЕНДЕ.

    • База данных в порядке (2) — при открытии записи в phpMyAdmin и проверке значения напрямую все символы отображаются правильно.
  • Эта проблема НЕ связана с кодировкой браузера/ОС, проверялось на 4 разных машинах, 3 ОС и 9 браузерах.

Я перепробовал все известные мне решения из прошлого опыта, включая:

  • Проверку wp-config (всё в порядке, utf-8 определена, collate корректна)
  • Проверку базы данных — всё UTF-8
  • Проверку заголовка (<?php bloginfo('charset'); ?>) — он корректно отображается как utf-8 с валидной разметкой.
  • Открытие всех файлов темы в редакторе, конвертацию кодировки в UTF-8 без BOM и сохранение.

Может, я что-то упустил? Есть идеи?

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

А ваши файлы записаны/сохранены в UTF-8 (Темы, Плагины)?

kaiser kaiser
8 янв. 2012 г. 07:23:06

да - я уже писал об этом в самом вопросе. UTF-8 без BOM

User User
8 янв. 2012 г. 07:23:44

Вы написали "Темы", но не плагины. Вы точно отключили все плагины?

kaiser kaiser
8 янв. 2012 г. 07:24:39

нет. Я не деактивировал никакие плагины, потому что их не установлено (ну, может быть, Askimet или Hello Dolly — но они не активированы)

User User
8 янв. 2012 г. 08:06:05

Единственная ситуация, когда я сталкивался с чем-то подобным, была связана с результатами геокодирования Google, так как они не определены. Решением было преобразование всего в utf-8 на хуке pre_save.

kaiser kaiser
8 янв. 2012 г. 17:33:27

Почему используется тег htmlspecialchars-decode? Возникает ли эта проблема с темой TwentyEleven тоже?

fuxia fuxia
8 янв. 2012 г. 18:14:42

@ Kaiser - спасибо, у меня ЕСТЬ функции, связанные с google.maps, которые я написал - .. Я посмотрю в этом направлении - хотя НИ ОДНА из них на самом деле не вызывается. @toscho - тег стоит потому, что ЭТО МОЖЕТ быть связано с проблемой декодирования и кодирования html специальных символов. И да, это происходит и с TwentyEleven.

User User
9 янв. 2012 г. 07:16:29

ОБНОВЛЕНИЕ - до сих пор не понимаю, в чем проблема .. Но я использовал функцию mb_convert_encoding() в php. Это, конечно, не идеально, и мне все еще хотелось бы знать, ПОЧЕМУ это произошло, чтобы избежать проблем в будущем, так что если у кого-то есть идеи/решения - пожалуйста, напишите.

User User
17 янв. 2012 г. 08:10:35

Привет @Obmerkronen, звучит интригующе. Вот что я бы попробовал, если вы еще этого не сделали: Запустите чистую установку WordPress на новой БД и убедитесь, что UTF-8 символы работают. Если да, измените wp-config.php для использования БД вашей, назовем её "повреждённой", установки. Если чистая установка работает со своей БД, но не работает с "повреждённой" БД, значит, проблема в вашей БД. Если чистая установка работает с обеими, значит, проблема в файлах "повреждённой" установки. Если чистая установка не работает, скорее всего, это настройки PHP или MySQL (что возможно, даже если другие старые установки работают). Дайте мне знать, что получится!

Matthew Boynes Matthew Boynes
30 янв. 2012 г. 03:38:59

@ Matthew Boynes - спасибо за интерес! Я уже проверил это, когда разбирался с проблемой - на чистой установке патология сохранялась, даже без внесения изменений и без дополнительных функций (кроме тех, что я написал - они совершенно не связаны и безвредны... С тех пор я переключился на другой проект, но как только появится возможность, я постараюсь разобраться, почему так произошло!

User User
1 февр. 2012 г. 08:18:18

Возможно, проблема на стороне сервера. У вас есть файл .htaccess для домена или папки, в которой установлен WordPress?

Donald Jenkins Donald Jenkins
17 февр. 2012 г. 02:06:27
Показать остальные 6 комментариев
Все ответы на вопрос 2
3

Редактирование:

Есть ли у вас <meta charset="utf-8" /> в теге <head>? Пользователь здесь решил похожую проблему с кодировкой символов, добавив это.

На самом деле, при поиске utf-8 character encoding in wordpress можно найти много результатов в Google.

Также, имеет ли значение, если вставить текст в HTML-режим редактора и сохранить его?


Следующее не очень хорошая идея, как объяснил @toscho в комментариях.

Не уверен, что это лучший способ решения проблемы, но это сработало для одного из сайтов моего клиента.

Найдите эти две строки в вашем файле wp-config.php:

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

И закомментируйте их следующим образом:

//define('DB_CHARSET', 'utf8');
//define('DB_COLLATE', '');
20 февр. 2012 г. 21:55:53
Комментарии

Теперь вы рискуете получить смешанные сохранённые кодировки. Не лучшая идея.

fuxia fuxia
20 февр. 2012 г. 22:24:33

@toscho Верно, я ищу в интернете лучшее решение и скоро обновлю свой ответ.

Jared Jared
20 февр. 2012 г. 22:28:53

<meta charset="utf-8" />

Добавление этого сработало для меня.

Rahul Rahul
17 авг. 2017 г. 10:46:10
0

Используете ли вы функцию htmlentities() для экранирования вывода? Если да, то необходимо указать 'UTF-8' в качестве третьего параметра.

21 февр. 2012 г. 22:48:41