Браузер отображает вместо ´ - PullRequest
9 голосов
/ 04 ноября 2010

У меня есть файл PHP со следующим текстом:

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

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

This is what you´ll use

А по другому, как:

This is what you�ll use

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


Примечание для всех (для дальнейшего использования)

Я реализовал предложение Гордона / Гамбо, за исключением того, что реализовал его на уровне сервера, а не на уровне приложений. Обратите внимание, что (а) мне пришлось перезапустить сервер Apache и, что более важно, (б) мне пришлось заменить существующие «неверные данные» исправленными данными в правильной кодировке.

/ и т.д. / php.ini

default_charset = "iso-8859-1"

Ответы [ 7 ]

16 голосов
/ 04 ноября 2010

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

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

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

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

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

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

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

Более подробное объяснение причин см. В ответе Гамбо .

8 голосов
/ 04 ноября 2010

Отображение ЗАМЕНА ХАРАКТЕРА (U + FFFD), скорее всего, означает, что вы указываете, что ваш вывод является Unicode, а ваши данные - нет.

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

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

1 голос
/ 04 ноября 2010

Подводя итог, возможно, немного:

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

Для кодирования вам может пригодиться UTF-8.

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

1 голос
/ 04 ноября 2010

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

Значение символа апостроф в ASCII равно &#8217;.Попробуйте ввести это значение в свой HTML-код, и он должен работать правильно для вас.

0 голосов
/ 04 ноября 2010

Вероятно, это связано с тем, что данные, которые вы вставляете на страницу с PHP, находятся в кодировке символов, отличной от самой страницы (наиболее распространенная итерация - латинская 1 и другая UTF-8).

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

0 голосов
/ 04 ноября 2010
  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" />

0 голосов
/ 04 ноября 2010

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

Например,

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