Символы вопросительного знака, отображаемые в тексте, почему это? - PullRequest
21 голосов
/ 27 октября 2008

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

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

Вот снимок экрана, показывающий, что он находится на работающем сервере и на зеркальном сервере.

Что может произойти в процессе резервного копирования на зеркальный сервер? alt text

Ответы [ 8 ]

20 голосов
/ 27 октября 2008

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

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

11 голосов
/ 22 апреля 2012

Отредактируйте файл конфигурации Apache на «зеркальном» сервере (сервере, на котором возникла проблема) и закомментируйте следующую строку:

AddDefaultCharset UTF-8

Затем перезапустите Apache:

service httpd restart

Проблема в том, что строка «AddDefaultCharset UTF-8» переопределяет Content-Type, указанный в файлах .html; e.g.:

<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 голосов
/ 08 февраля 2013

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

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

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

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

enter image description here

Для решения проблемы нажмите меню Encoding в Notepad++ и выберите Encode in UTF-8. Тебе должно быть хорошо идти. :)

1 голос
/ 27 октября 2008

Это будет связано с кодировкой символов.

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

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

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

Смотри также здесь

1 голос
/ 27 октября 2008

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

0 голосов
/ 27 октября 2008

Я обычно проклинаю слово 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, "

");
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 (содержимое);

0 голосов
/ 27 октября 2008

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

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

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

0 голосов
/ 27 октября 2008

Unicode или другие символы набора символов проваливаются?

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

...