2008-10-27 5 views
17

У меня есть резервный сервер, который автоматически создает резервные копии моего сайта, как файлов, так и базы данных.Символы вопросительного знака, отображаемые в тексте, почему?

На живом сайте текст выглядит отлично, но когда вы просматриваете его зеркальную версию, он отображает «?» в пределах некоторого текста. Этот текст сохраняется в таблице базы данных новостей.

Это снимок экрана, который находится на реальном сервере и на зеркальном сервере.

Что может произойти в процессе резервного копирования на зеркальный сервер? alt text http://i34.tinypic.com/2mpbfo6.jpg

ответ

15

Следующие статьи будут полезны

http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

После подключения к проблеме базы данных следующую команду:

SET utf8 NAMES» «;

Убедитесь, что веб-страница использует кодировку UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

PHP также предлагает несколько функций, которые будут полезны для преобразования:

http://us3.php.net/manual/en/function.iconv.php

http://us.php.net/mb_convert_encoding

0

Юникод или другие символы, попадающие в символ?

Я видел похожие «странные» персонажи на сайтах, на которых я часто работал, когда текст копируется из электронного письма или какого-либо другого формата документа (например, слова) в текстовый редактор. Редактор может отображать символы не ASCII, но браузер не может. Для веб-сайта я бы предложил искать код объекта HTML для символа и вставить его вместо ... или переключиться на более стандартные.

1

Ваш браузер не интерпретировал кодировку страницы правильно (либо из-за того, что вы вынудили ее к определенной настройке, либо неправильно настроили страницу) и, следовательно, не можете отобразить некоторые символы.

1

Это будет иметь отношение к кодировке символов.

Вы уверены, что зеркальный сайт имеет те же свойства в отношении кодировок символов, что и ваш главный сервер?

В зависимости от того, какой сервер у вас есть, это может быть свойство самого процесса сервера, или это может быть переменная среды.

Например, если это среда UNIX, возможно, попробуйте сравнить LANG или LC_ALL?

Смотрите также here

+0

Живой сервер Solaris, зеркальный сервер Linux rhel5, если это имеет значение. – Brad 2008-10-27 19:01:07

+0

Linux также использует LANG/LC_ALL. См. Например: http://www.linux.com/base/ldp/howto/Indic-Fonts-HOWTO/locale.html – toolkit 2008-10-28 09:55:29

0

Проверьте набор символов, испускаемый зеркальной службой э. Кажется, что разница в том, что на главном сервере - на сайте live появляется вывод Unicode, где зеркала нет.Кроме того, обычно рекомендуется очищать символы Unicode в вашем входящем контенте и заменять их соответствующими объектами HTML.

В вашей конкретной проблеме рассматриваются «умные кавычки», «em dashes» и «en dashes». Я знаю, что вы можете заменить em dashes на &mdash; и n-тире с &ndash; (что должно быть сделано со стороны ввода базы данных); Я не знаю, какова будет правильная замена смарт-котировок. (Обычно я просто заменяю все фигурные одинарные кавычки на «и все фигурные двойные кавычки с» ... Типичные выродки могут быть свободны стрелять в меня.)

Следует отметить, что некоторые браузеры более прощающие, чем другие с этим .. вопрос - Internet Explorer на Windows, как правило, автоматически волшебно обнаружить и «исправить» это, Firefox и большинство других браузеров отображаются вопросительные знаки

0

Я обычно проклинают MS Word, а затем выполнить следующую 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.replace (/ «/ г, '"');
содержание = content.replace (/»/ г, '"');
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, '& фунт;');
content = content.replace (/ ¥/g, '& yen;');

out.Write (content);

9

Редактировать ваш файл конфигурации 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 style="mso-spacerun: yes">ááá </span> 
3

Я получил здесь в поисках решения для JavaScript отображаются в браузере и, хотя и не напрямую связаны с базой данных ...

В моем случае я скопировал и вложил текст, который я нашел в Интернете, в файл JavaScript и сохранил его с помощью Windows Notepad.

Когда страница, которая использует этот выходной файл JavaScript строки были вопросительные знаки (например, те, которые показаны в этом вопросе) вместо специальных символов, таких как буквы с диакритическими и т.д.

Я открыл файл, используя Notepad++. Сразу же после открытия файла я увидел, что кодировка была установлена ​​в ANSI, как вы можете видеть (курсор мыши на сноске) в следующем скриншоте:

enter image description here

Чтобы решить эту проблему, откройте меню Encoding в Notepad++ и выберите Encode in UTF-8. Тебе должно быть хорошо. :)