2010-11-04 6 views
9

У меня есть файл 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"

+8

Похоже на проблему кодирования. В любом случае, почему бы вам не использовать '' 'вместо' '', как все? : D – Shikiryu

+2

проверить кодировку возвращаемого документа (заголовки), может быть объяснение, в любом случае вы можете просто использовать '’' – Hannes

+6

И я добавлю: _This пахнет Word copy/paste_ – Shikiryu

ответ

16

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

Либо отправить содержание с header, который включает в себя

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

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

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

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

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

EDIT2 для более подробного объяснения причин, see Gumbo's answer.

+0

Как вы знаете, что его документ находится в UTF-8? – RoToRa

+6

@ Gordon +1. Каждый должен использовать Unicode. – pltvs

+1

Неправильно. meta ersatz ничего не влияет. Делает только HTTP-заголовок. –

0

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

Э.Г.

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

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" />

8

Дисплей ЗАМЕНЫ ХАРАКТЕРА (U + FFFD), скорее всего, означает, что вы - specifying your output, чтобы быть Юникодом, но ваши данные нет.

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

Чтобы исправить это, убедитесь, что вы находитесь specifying the character encoding properly в соответствии с вашим фактическим (или наоборот).

0

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

1

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

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

Надеюсь, это поможет!

+0

ASCII имеет только один символ апострофа, и это на 0x27. Символьная ссылка '’' относится к символу U + 2019 * RIGHT SINGLE QUOTATION MARK * в Unicode. – Gumbo

+0

@Gumbo: RIGHT SINGLE QUOTATION MARK ** является правильным символом для апострофа: http://www.languagegeek.com/typography/apostrophes.html – RoToRa

+0

Я предполагаю, что он имел в виду, что '’' был чистой струной ascii, а чем характер, который он представлял, был ascii. – Chris

1

Подведем может быть до немного:

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

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

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

+0

Вы решили проблему? – Czar