У меня есть резервный сервер, который автоматически выполняет резервное копирование моего живого сайта, как файлов, так и базы данных.
На действующем сайте текст выглядит нормально, но когда вы просматриваете его зеркальную версию, отображается "?" в пределах некоторого текста. Этот текст хранится в таблице базы данных новостей.
Вот снимок экрана, на котором он находится на живом сервере и на зеркальном сервере.
Что могло произойти в процессе резервного копирования на зеркальный сервер?







Unicode или другие символы набора символов не выдерживают?
Я видел подобные «странные» символы на сайтах, над которыми я часто работал, когда текст копируется из электронного письма или другого формата документа (например, слова) в текстовый редактор. Редактор может отображать символы, отличные от ASCII, но браузер не может. Для веб-сайта я бы посоветовал найти код объекта HTML для символа и вставить его вместо этого ... или переключиться на более стандартные.
Ваш браузер неправильно интерпретировал кодировку страницы (либо из-за того, что вы установили определенную настройку, либо потому, что страница настроена неправильно), и поэтому не может отображать некоторые символы.
Это как-то связано с кодировками символов.
Вы уверены, что зеркальный сайт имеет те же свойства в отношении кодировки символов, что и ваш основной сервер?
В зависимости от того, какой у вас сервер, это может быть свойство самого серверного процесса или переменная среды.
Например, если это среда UNIX, возможно, попробуйте сравнить LANG или LC_ALL?
См. Также здесь
Linux также использует LANG / LC_ALL. См. Например: linux.com/base/ldp/howto/Indic-Fonts-HOWTO/locale.html
А также посмотрите, можете ли вы проверить заголовки HTTP, возвращаемые с обоих серверов, чтобы найти очевидные несоответствия, связанные с кодировкой символов.
Следующие статьи будут полезны
http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
После подключения к базе данных выполните следующую команду:
УСТАНОВИТЬ ИМЕНА 'utf8';
Убедитесь, что ваша веб-страница также использует кодировку UTF-8:
<meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" />
PHP также предлагает несколько функций, которые будут полезны для преобразований:
Проверьте набор символов, излучаемый вашим зеркальным сервером. Похоже, есть разница с основным сервером - живой сайт, похоже, выводит Unicode, а зеркало - нет. Кроме того, обычно рекомендуется очищать символы Unicode во входящем содержимом и заменять их соответствующими объектами HTML.
Ваша конкретная проблема касается «умных кавычек», «длинных тире» и «коротких тире». Я знаю, что вы можете заменить длинное тире на — и n-тире на – (что должно быть сделано на стороне ввода вашей базы данных); Я не знаю, какой будет правильная замена умным цитатам. (Обычно я просто заменяю все фигурные одинарные кавычки на ', а все фигурные двойные кавычки на «... фанаты типографики могут смело стрелять в меня, как только увидишь.)
Я должен отметить, что некоторые браузеры более снисходительны к этой проблеме, чем другие - Internet Explorer в Windows имеет тенденцию автоматически обнаруживать и «исправлять» это; Firefox и большинство других браузеров отображают вопросительные знаки.
Обычно я проклинаю слово MS, а затем запускаю следующий сценарий Wscript.
// заменяем на путь к файлу, который нужно очистить
PATH = "test.html"
var go = WScript.CreateObject ("Scripting.FileSystemObject");
var content = go.GetFile (PATH) .OpenAsTextStream (). ReadAll ();
var out = go.CreateTextFile ("clean -" + PATH, true);
// символы
content = content.replace (/ “/ g, '"');
content = content.replace (/ ”/ g, '"');
content = content.replace (/ ’/ g," '");
content = content.replace (/ - / g, "-");
content = content.replace (/ © / g, "& copy;");
content = content.replace (/ ® / g, "& reg;");
content = content.replace (/ ° / g, "& deg;");
content = content.replace (/ ¶ / g, "<p>");
content = content.replace (/ ¿/ g, "& iquest;");
content = content.replace (/ ¡/ g, '& iexcl;');
content = content.replace (/ ¢ / g, '& cent;');
content = content.replace (/ £ / g, '& pound;');
content = content.replace (/ ¥ / g, '& yen;');
out.Write (содержание);
Вы можете добавить: content = content.replace (/ á / g, '& nbsp;');
Отредактируйте файл конфигурации Apache на «зеркальном» сервере (сервере с проблемой) и закомментируйте следующую строку:
AddDefaultCharset UTF-8
Затем перезапустите Apache:
service httpd restart
Проблема в том, что строка «AddDefaultCharset UTF-8» переопределяет Content-Type, указанный в файлах .html; например.:
<meta http-equiv=Content-Type content = "text/html; charset=windows-1252">
Наиболее распространенным признаком является то, что коды символов выше 127 отображаются в виде черных ромбов с вопросительными знаками на них (в Chrome, Safari или Firefox) или в виде маленьких квадратов (в IE и Opera). Файлы HTML, созданные Microsoft Word, обычно содержат много таких символов, наиболее распространенным из которых является код символа 160 = 0xA0, что эквивалентно "& nbsp;" в кодировке Windows-1252 и часто встречается между тегами span, например:
<span style = "mso-spacerun: yes">ááá </span>
Комментирование строки кодировки по умолчанию сработало для меня, нужен ISO-8859-1. Ваше здоровье.
Это была моя проблема. Я полностью забыл об определении кодировки в моем файле конфигурации.
Да, это была моя проблема - кодировка была установлена для UTF-8, но символы были windows-1252. Вот что я получаю за копирование и вставку из документа Word
Не могли бы вы сообщить мне название файла, который нужно изменить
На моем (пожилом) веб-сервере файл конфигурации Apache: /etc/httpd.conf Он также может находиться в одном из следующих мест: /etc/apache2/httpd.conf /etc/apache2/apache2.conf / etc / httpd / httpd.conf /etc/httpd/conf/httpd.conf
Я пришел сюда в поисках решения для JavaScript, отображаемого в браузере и не связанного напрямую с базой данных ...
В моем случае я скопировал и вставил текст, который нашел в Интернете, в файл JavaScript и сохранил его с помощью Блокнота Windows.
Когда страница, которая использует этот файл JavaScript, выводит строки, вместо специальных символов, таких как буквы с диакритическими знаками, и т.
Я открыл файл с помощью Notepad++. Сразу после открытия файла я увидел, что кодировка символов была установлена как ANSI, как вы можете видеть (курсор мыши в нижнем колонтитуле) на следующем снимке экрана:

Чтобы решить эту проблему, щелкните меню Encoding в Notepad++ и выберите Encode in UTF-8. Тебе должно быть хорошо. :)
У меня была эта проблема, поэтому я просто взял весь свой контент, скопировал / вставил его в блокнот, создал новый файл php, вставил обратно, повторно сохранил и перезаписал, и .. это сработало! Это действительно был пережиток редактирования Microsoft Word ...
Живым сервером является Solaris, зеркальным сервером - Linux rhel5, если это имеет значение.