Символы вопросительного знака, отображаемые в тексте, почему это?

17

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

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

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

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

    
задан Brad 27.10.2008 в 19:44
источник

8 ответов

16

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

Ссылка

Ссылка

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

SET NAMES 'utf8';

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

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

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

Ссылка

Ссылка

    
ответ дан IAdapter 27.10.2008 в 19:50
источник
9

Измените конфигурационный файл 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, который эквивалентен «& amp; nbsp;» в кодировке Windows-1252 и часто встречается между тегами span, например:

<span style="mso-spacerun: yes">ááá </span>
    
ответ дан Dave Burton 22.04.2012 в 09:12
источник
  • Комментирование строки набора символов по умолчанию для меня работало, необходимо ISO-8859-1. Приветствия. –  Ollie 22.12.2012 в 20:56
  • Это была моя проблема. Я полностью забыл об определении кодировки в файле конфигурации. –  Michael Yaworski 21.01.2016 в 04:49
  • Yup, это была моя проблема - набор символов был установлен для UTF-8, но персонажами были окна-1252. Это то, что я получаю для копирования вставки из слова doc –  B T 24.03.2016 в 04:50
3

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

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

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

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

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

ответ дан Leniel Macaferi 08.02.2013 в 17:41
источник
1

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

    
ответ дан JamShady 27.10.2008 в 19:49
источник
1

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

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

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

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

См. также здесь

    
ответ дан toolkit 27.10.2008 в 19:50
источник
  • Живой сервер - это Solaris, зеркальный сервер - Linux rhel5, если это имеет значение. –  Brad 27.10.2008 в 20:01
  • Linux также использует LANG / LC_ALL. См. Например: linux.com/base/ldp/howto/Indic-Fonts-HOWTO/locale.html –  toolkit 28.10.2008 в 10:55
  • А также посмотрите, можете ли вы проверить заголовки HTTP, возвращенные с обоих серверов, чтобы искать очевидные несоответствия в кодировке символов. –  toolkit 28.10.2008 в 10:56
0

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

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

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

    
ответ дан John Rudy 27.10.2008 в 19:51
источник
0

Я обычно проклинаю слово 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.replace (/ «/ г, '"');
содержание = content.replace (/»/ г, '"');
содержание = content.replace (/»/ г, "'");
содержание = content.replace (/ - / г, "-");
содержание = content.replace (/ © / г, "& амп; копия;");
Содержание = content.replace (/ ® / г, "& амп; р;");
содержание = content.replace (/ ° / г, "& амп; град;");
содержание = content.replace (/ ¶ / г, "& л; р & GT;");
содержание = content.replace (/ ¿/ г, "& амп; iquest;");
содержание = content.replace (/ ¡/ г, '& амп; iexcl;');
содержание = content.replace (/ ¢ / г, '& амп; цента;');
содержание = content.replace (/ £ / г, '& амп; фунт;');
содержание = content.replace (/ ¥ / г, '& амп; иен;');

out.write (содержание);
    

ответ дан Nick Van Brunt 27.10.2008 в 20:16
источник
0

Юникод или другие символы набора символов, проходящие через?

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

    
ответ дан Benjamin Lee 27.10.2008 в 19:49
источник