Браузер отображает � вместо

у меня есть файл php, который имеет следующий текст:

<div class="small_italic">This is what you´ll use</div>

на одном сервере, это выглядит как:

This is what you´ll use

а на другом, как:

This is what you�ll use

почему должна быть разница и что я могу сделать, чтобы она выглядела правильно (как Апостроф)?


Примечание ко всем (на будущее)

я реализовал предложение Гордона / Гумбо, за исключением того, что я реализовал его на уровне сервера, а не уровень приложения. Обратите внимание, что (a) мне пришлось перезапустить сервер apache и, что более важно, (b) мне пришлось заменить существующие "плохие данные" исправленными данными в правильной кодировке.

/ etc / php.ini

default_charset = "iso-8859-1"

7 ответов


вы должны убедиться, что содержимое подается с правильной кодировкой:

либо отправить содержимое с заголовок, которая включает

<?php header("Content-Type: text/html; charset=[your charset]"); ?>

или если заголовки кодировок HTTP не существуют - вставить <META> элемент на <head>

<meta http-equiv="Content-Type" content="text/html; charset=[your charset]" />

как имя атрибута предполагает, что http-equiv является эквивалентом заголовка ответа http, и пользовательские агенты должны использовать их в случае, если соответствующий http заголовки не установлены.

EDIT1: как Ханнес уже предложил в комментариях к вопросу, вы можете посмотреть на заголовки, возвращаемые вашим веб-сервером, чтобы увидеть, какую кодировку он обслуживает. Существует вероятность расхождения между двумя серверами. Поэтому измените [your charset] часть выше к" рабочему " серверу.

EDIT2 для более подробного объяснения причин,см. ответ Гамбо.


дисплей ЗАМЕНА СИМВОЛА (U+FFFD) скорее всего означает, что вы указание вывода быть Unicode, но ваши данные нет.

в этом случае, если УДАРЕНИЯ ´, например, кодируется с помощью ISO 8859-1, он закодирован с последовательностью байтов 0xB4, поскольку это кодовая точка этого символа в ISO 8859-1. Но эта последовательность байтов незаконна в кодировке Unicode, такой как UTF-8. В том в случае замены отображается символ U+FFFD.

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


простое решение-использовать ASCII код для специальных символов.

значение apostrophe символ в ASCII является &#8217;. попробуйте поместить это значение в свой html, и оно должно работать правильно для вас.

надеюсь, что это помогает!


подводя итог, может быть, немного:

  1. убедитесь, что файл, сохраненный на веб-сервере, имеет правильную кодировку
  2. убедитесь, что веб-сервер также поставляет его с правильной кодировкой
  3. убедитесь, что метатеги HTML установлены в правильную кодировку
  4. обязательно используйте" стандартные " специальные символы, т. е. используйте "вместо того, чтобы писать что-то вроде"кода Люка Скайуокера"

для кодирования UTF-8 может быть хорошим для тебя.

Если этот ответ помогает, пожалуйста, отметьте ответ как правильный или голосовать за нее. THX


установите набор символов браузеров в определенное значение:

Э. Г.

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

1) создать .htaccess файл в корневом каталоге:

AddDefaultCharset utf-8
AddCharset utf-8 *
<IfModule mod_charset.c>
CharsetSourceEnc utf-8
CharsetDefault utf-8
</IfModule>

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


Это, вероятно, вызвано тем, что данные, которые вы вставляете на страницу с PHP, находятся в другой кодировке символов от самой страницы (наиболее распространенной итерацией является латинский 1 и другой UTF 8). Проверьте кодировку, используемую для страницы и для вашей базы данных. Есть вероятность, что будет несоответствие.