Символы вопросительного знака отображаются в тексте. Почему это происходит?
-
04-07-2019 - |
Вопрос
У меня есть сервер резервного копирования, который автоматически создает резервные копии моего действующего сайта, как файлов, так и базы данных.
На живом сайте текст выглядит нормально, но при просмотре его зеркальной версии в некоторой части текста отображается '?).Этот текст хранится в таблице базы данных новостей.
Вот снимок экрана, показывающий, как он находится на основном сервере и на зеркальном сервере.
Что может произойти в процессе резервного копирования на зеркальный сервер?
Решение
Следующие статьи будут полезны
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 также предлагает несколько функций, которые будут полезны для преобразований:
Другие советы
Отредактируйте файл конфигурации Apache в " mirror " сервер (сервер с проблемой) и закомментируйте следующую строку:
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, что эквивалентно & Quot; & Amp; nbsp; & Quot; в кодировке Windows-1252 и часто встречается между тегами span, например так:
<span style="mso-spacerun: yes">ááá </span>
Я пришел сюда в поисках решения для JavaScript, отображаемого в браузере, хотя и не связанного напрямую с базой данных...
В моем случае я скопировал и вставил текст, найденный в Интернете, в файл JavaScript и сохранил его с помощью Блокнота Windows.
Когда страница, использующая этот файл JavaScript, выводила строки, вместо специальных символов, таких как буквы с диакритическими знаками и т. д., были вопросительные знаки (например, показанные в вопросе).
Я открыл файл с помощью Notepad++
.Сразу после открытия файла я увидел, что кодировка символов установлена как ANSI
как вы можете видеть (курсор мыши в нижнем колонтитуле) на следующем снимке экрана:
Чтобы решить проблему, нажмите кнопку Encoding
меню в Notepad++
и выберите Encode in UTF-8
.Вам должно быть хорошо идти.:)
Ваш браузер неправильно интерпретировал кодировку страницы (либо потому, что вы принудительно установили ее для определенного параметра, либо страница настроена неправильно) и поэтому не может отображать некоторые символы.
Это будет связано с кодировкой символов.
Вы уверены, что зеркальный сайт имеет те же свойства в отношении кодировки символов, что и ваш главный сервер?
В зависимости от того, какой у вас сервер, это может быть свойством самого процесса сервера или переменной среды.
Например, если это среда UNIX, возможно, попробуйте сравнить LANG или LC_ALL?
См. также здесь
Проверьте набор символов, излучаемый вашим зеркальным сервером. Кажется, есть разница с этим для основного сервера - живой сайт, кажется, выводит Unicode, а зеркало - нет. Кроме того, обычно хорошей идеей является удаление символов Unicode во входящем контенте и замена их соответствующими HTML-объектами.
Ваш конкретный вопрос касается " умных цитат, " " em dashes " и " en dashes. " Я знаю, что вы можете заменить их тире на —
, а n-тире на –
(что должно быть сделано на стороне ввода вашей базы данных); Я не знаю, какой будет правильная замена умных цитат. (Я обычно просто заменяю все фигурные одинарные кавычки на ', а все фигурные двойные кавычки на & Quot; ... Типичные фанаты могут свободно стрелять в меня сразу.)
Я должен отметить, что некоторые браузеры с большей вероятностью снисходительны к этой проблеме - Internet Explorer в Windows имеет тенденцию автоматически определять и & исправлять " этот; Firefox и большинство других браузеров отображают знаки вопроса.
Обычно я проклинаю MS Word и запускаю следующий Wscript.
// заменить путь к файлу, который нужно очистить
PATH = & Quot; test.html & Quot;
var go = WScript.CreateObject (" Scripting.FileSystemObject ");
var content = go.GetFile (PATH) .OpenAsTextStream (). ReadAll ();
var out = go.CreateTextFile (" clean - " + PATH, true);
// символы
содержание = content.replace (& / # 8220; / г, 'Quot &;');
содержание = content.replace (& / # 8221; / г, 'Quot &;');
содержание = content.replace (/ # 8217 &; & / г, Quot; 'Quot &;);
содержание = content.replace (& / # 8211; / г, Quot &; - Quot &;);
содержание = content.replace (/ # 169 & / г, Quot & & амп; копировать; Quot &;);
содержание = content.replace (& / # 174; / г, Quot &; & амп; р; Quot &;);
содержание = content.replace (/ # 176 &; / г, Quot &; & амп; град; Quot &;);
содержание = content.replace (/ # 182 &; / г, Quot &; л &; р GT &; Quot &;);
содержание = content.replace (& / # 191; / г, Quot &; & амп; iquest; Quot &;);
содержание = content.replace (& / # 161; / г, 'амп &; iexcl;');
содержание = content.replace (& / # 162; / г, 'амп &; цент;');
содержание = content.replace (& / # 163; / г, 'амп &; фунт;');
содержание = content.replace (& / # 165; / г, 'амп &; йен;');
out.write (содержание);
р>
Юникод или другие символы набора символов проваливаются?
Я видел похожие " странные " символы появляются на сайтах, над которыми я часто работал, когда текст копируется из электронного письма или другого формата документа (например, слова) в текстовый редактор. Редактор может отображать символы не ASCII, но браузер не может. Для веб-сайта я бы предложил найти код сущности HTML для символа и вставить его вместо этого ... или переключиться на более стандартные.