Это то, что делает браузер, когда он не знает, какую кодировку использовать для символа. Убедитесь, что вы указали тип кодировки текста, отправляемого клиенту, либо в заголовках, либо в мета-разметке.
В HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
В PHP (перед отправкой любого другого контента клиенту):
header('Content-Type: text/html; charset=utf-8');
Полагаю, вам понадобится кодировка UTF-8. Если ваш сайт использует другую кодировку для текста, вам следует заменить UTF-8 кодировкой, которую вы используете.
Следует обратить внимание на то, что при использовании HTML для указания кодировки браузер перезапустит рендеринг страницы, как только увидит метатег Content-Type
, поэтому вы должны включить тег <meta />
сразу после тега <head />
в ваша страница, поэтому браузер не выполняет больше дополнительной обработки, чем нужно.
Другая распространенная кодировка - это «iso-8859-1» (Базовая латиница), которую вы можете использовать вместо UTF-8. Вы можете найти более подробную информацию из этой замечательной статьи о кодировках символов и сети . Вы также можете получить исчерпывающий список кодировок здесь , если вам нужен определенный тип.
Если ничего не работает, другая (редкая) возможность состоит в том, что на вашем компьютере может не быть установлен шрифт с символами, необходимыми для отображения страницы. Я пытался повторить ваши результаты на моем собственном сервере , но мне не повезло, возможно, потому, что на моем компьютере установлено много шрифтов, поэтому браузер всегда может заменить недоступные символы из одного шрифта другим шрифтом.
Что я заметил, проведя дальнейшие исследования, так это то, что если текст отправляется в кодировке, отличной от кодировки, которую сообщает браузер, то символы Юникода могут отображаться неожиданно. Чтобы обойти это, я использовал представление сущности символа HTML специальных символов, поэтому â
становится â
в моем HTML и é
становится é
. После того, как я это сделал, независимо от того, в какой кодировке я указывал, мои символы отображались правильно.
Очевидно, что вы не хотите изменять свою базу данных для кодирования символов Юникода в формате HTML. Если вы должны это сделать, то лучше всего использовать функцию PHP htmlentities()
. Эту функцию следует использовать для любого текста, управляемого данными, в котором предполагается, что в нем есть символы Юникода. Это может раздражать, но если указание кодировки не помогает, это хорошее последнее средство для принудительной работы символов Юникода.