Почему символы вопроса отображаются в тексте, почему?
У меня есть резервный сервер, который автоматически создает резервные копии моего сайта, как файлов, так и базы данных.
На живом сайте текст выглядит хорошо, но когда вы просматриваете зеркальную версию, он отображает '?' в пределах некоторого текста. Этот текст сохраняется в таблице базы данных новостей.
Здесь показан снимок экрана, который находится на реальном сервере, и на зеркальном сервере.
Что может произойти в процессе резервного копирования на зеркальный сервер?
alt text http://i34.tinypic.com/2mpbfo6.jpg
Ответы
Ответ 1
Следующие статьи будут полезны
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 NAMES 'utf8';
Убедитесь, что ваша веб-страница также использует кодировку 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
Ответ 2
Измените конфигурационный файл Apache на "зеркальном" сервере (на сервере с проблемой) и закомментируйте следующую строку:
AddDefaultCharset UTF-8
Затем перезапустите Apache:
service httpd restart
Проблема в том, что строка "AddDefaultCharset UTF-8" переопределяет тип содержимого, указанный в файлах .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>
Ответ 3
Я нашел здесь решение для JavaScript, отображаемое в браузере, и хотя оно напрямую не связано с базой данных...
В моем случае я скопировал и вложил текст, который я нашел в Интернете, в файл JavaScript и сохранил его с помощью Windows Notepad.
Когда страница, использующая этот файл JavaScript, выводит строки, там были вопросительные знаки (например, показанные в вопросе) вместо специальных символов, таких как буквы с акцентом и т.д.
Я открыл файл, используя Notepad++
. Сразу после открытия файла я увидел, что кодировка символов была установлена как ANSI
, как вы можете видеть (курсор мыши на нижнем колонтитуле) в следующем скриншоте:
![enter image description here]()
Чтобы решить проблему, нажмите Encoding
в меню Notepad++
и выберите Encode in UTF-8
. Тебе должно быть хорошо.:)
Ответ 4
Ваш браузер не правильно интерпретировал кодировку страницы (либо потому, что вы вынудили ее к определенному параметру, либо неправильно задали страницу) и, следовательно, не могут отображать некоторые символы.
Ответ 5
Это будет иметь отношение к кодировке символов.
Вы уверены, что зеркальный сайт имеет те же свойства в отношении кодировок символов, что и ваш основной сервер?
В зависимости от того, какой сервер у вас есть, это может быть свойство самого процесса сервера, или это может быть переменная среды.
Например, если это среда UNIX, возможно, попробуйте сравнить LANG или LC_ALL?
См. также здесь
Ответ 6
Юникод или другие символы набора символов, проходящие через?
Я видел, как похожие "странные" символы появляются на сайтах, на которых я часто работал, когда текст копируется из электронного письма или какого-либо другого формата документа (например, слова) в текстовый редактор. Редактор может отображать символы не ASCII, но браузер не может. Для веб-сайта я бы предложил искать код объекта HTML для символа и вставить его вместо... или переключиться на более стандартные.
Ответ 7
Проверьте набор символов, который выдается на вашем зеркальном сервере. Кажется, что разница в том, что на главном сервере - на сайте live появляется вывод Unicode, где зеркала нет. Кроме того, обычно рекомендуется очищать символы Unicode в вашем входящем контенте и заменять их соответствующими объектами HTML.
В вашей конкретной проблеме рассматриваются "умные кавычки", "em dashes" и "en dashes". Я знаю, что вы можете заменить em dashes на —
и n-тире с помощью –
(что должно быть сделано на стороне ввода вашей базы данных); Я не знаю, какова будет правильная замена смарт-котировок. (Обычно я просто заменяю все фигурные одиночные кавычки на "и все фигурные двойные кавычки" с... "Типичные выродки могут быть свободны стрелять в меня".
Я должен отметить, что некоторые браузеры более прощающие, чем другие, с этой проблемой - Internet Explorer на Windows имеет тенденцию к автоматическому обнаружению и "исправлению" этого; Firefox и большинство других браузеров отображают вопросительные знаки.
Ответ 8
Я обычно проклинаю слово 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, '& фунт;');
content = content.replace(/¥/g, '& yen;');
out.Write(content);