Одиночные кавычки должны использоваться для строковых значений, например, в списке VALUES ().
Backticks обычно используются для указания идентификатора, а также могут быть безопасны из-за случайного использования зарезервированных ключевых слов.
В сочетании PHP и MySQL двойные кавычки и одинарные кавычки значительно упрощают время записи запросов.
Убедитесь, что браузер и редактор используют кодировку UTF-8 вместо ISO-8859-1 / Windows-1252.
Или используйте ’
.
Вместо знака фунта я использовал: & amp; фунт; без пространства. Это разрешило эту проблему для меня.
Для евро: & amp; евро; без пробела.
Итак, в чем проблема,
blockquote>Это символ
< hr>’
(RIGHT SINGLE QUOTATION MARK
- U + 2019), который был закодирован как CP-1252 вместо UTF-8 . Если вы проверите таблицу encodings , вы увидите, что этот символ находится в UTF-8, состоящий из байтов0xE2
,0x80
и0x99
. Если вы проверите макет кодовой страницы CP-1252 , вы увидите, что каждый из этих байтов обозначает отдельные символыâ
,€
и™
.и как его исправить?
blockquote>Используйте UTF-8 вместо CP-1252 для чтения, записи, сохранения и отображения символов.
У меня есть Content-Type, установленный в UTF-8 как в моем теге
<head>
, так и в моих HTTP-заголовках:blockquote><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Это только инструктирует клиент, кодирование которого используется для интерпретации и отображения символов. Это не дает указания вашей собственной программе, которую кодировка должна использовать для чтения, записи, хранения и отображения символов. Точный ответ зависит от используемой серверной платформы / базы данных / языка программирования. Обратите внимание, что тот, который установлен в заголовке ответа HTTP, имеет приоритет над метатегами HTML. Метатег HTML будет использоваться только тогда, когда страница будет открыта из локальной файловой системы диска, а не из HTTP.
Кроме того, мой браузер настроен на
blockquote>Unicode (UTF-8)
:Это только заставляет клиента кодирование использовать для интерпретации и отображения символов. Но актуальной проблемой является то, что вы уже отправили
’
(закодированный в UTF-8) клиенту вместо’
. Клиент правильно отображает’
, используя кодировку UTF-8. Если клиент был неправильно проинсталлирован для использования, например, ISO-8859-1, скорее всего, вы виделиââ¬â¢
.
Я использую ASP.NET 2.0 с базой данных.
blockquote>Это наиболее вероятно, где ваша проблема. Вы должны проверить с помощью независимого инструмента базы данных, как выглядят данные.
Если присутствует символ
’
, значит, вы неправильно подключаетесь к базе данных. Вы должны указать соединителю базы данных, чтобы использовать UTF-8.Если ваша база данных содержит
’
, значит, ваша база данных испорчена. Скорее всего, таблицы не настроены на использованиеUTF-8
. Вместо этого они используют кодировку по умолчанию для базы данных, которая зависит от конфигурации. Если это ваша проблема, достаточно просто изменить таблицу для использования UTF-8. Если ваша база данных не поддерживает это, вам нужно будет воссоздать таблицы. Хорошая практика - установить кодировку таблицы при ее создании.Скорее всего, вы используете SQL Server, но здесь есть код MySQL (скопированный из этой статьи ):
CREATE DATABASE db_name CHARACTER SET utf8; CREATE TABLE tbl_name (...) CHARACTER SET utf8;
Если ваша таблица, однако, уже UTF-8, вам нужно сделать шаг назад. Кто или , что поместил там данные. Это , где проблема. Одним из примеров может служить формат HTML, который неправильно кодирован / декодирован.
Вот еще несколько ссылок, чтобы узнать больше о проблеме:
- Unicode - Как правильно получить символы?
Unicode - как правильно получить символы? , с более краткими и практическими сведениями, решения ориентированы на среды Java.- Как настроить ваш сайт PHP для использования UTF8 , ориентированного на среды PHP.
Если ваш тип контента уже является UTF8, то, скорее всего, данные уже поступают в неправильную кодировку. Если вы получаете данные из базы данных, убедитесь, что соединение с базой данных использует UTF-8.
Если это данные из файла, убедитесь, что файл правильно закодирован как UTF-8. Обычно вы можете установить это в диалоговом окне «Сохранить как ...» выбранного вами редактора.
Если данные уже нарушены при просмотре в исходном файле, скорее всего, это быть файлом UTF-8, но где-то в пути он был сохранен в неправильной кодировке.
Если кто-то получил эту ошибку на веб-сайте WordPress, вам необходимо изменить wp-config db charset:
define('DB_CHARSET', 'utf8mb4_unicode_ci');
вместо:
define('DB_CHARSET', 'utf8mb4');
Вы должны иметь текст для копирования / вставки из Word Document. Документ Word использует Smart Quotes. Вы можете заменить его специальным символом (& amp; rsquo;) или просто ввести свой HTML-редактор (').
Я уверен, что это решит вашу проблему.
У вас несоответствие в кодировке вашего персонажа; ваша строка кодируется в одной кодировке (UTF-8), и все, что интерпретирует эту страницу, использует другую (например, ASCII).
Всегда указывайте свою кодировку в своих заголовках HTTP и убедитесь, что это соответствует определению вашей инфраструктуры кодирование.
Пример HTTP-заголовка:
Content-Type text/html; charset=utf-8
<configuration>
<system.web>
<globalization
fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="en-US"
uiCulture="de-DE"
/>
</system.web>
</configuration>
То же самое произошло со мной с символом «-» (длинный знак минус). Я использовал эту простую замену, так что разрешите ее:
htmlText = htmlText.Replace('–', '-');
’
(код кодировки Unicode U+2019 RIGHT SINGLE QUOTATION MARK
) кодируется в UTF-8 в виде байтов:
0xE2 0x80 0x99
.
’
(кодовые страницы Unicode U+00E2 U+20AC U+2122
) кодируется в UTF-8 в виде байтов:
0xC3 0xA2
& nbsp; 0xE2 0x82 0xAC
& nbsp; 0xE2 0x84 0xA2
.
Это байты, которые ваш браузер фактически получает, чтобы создать ’
при обработке как UTF-8.
Это означает, что ваши исходные данные проходят две конвертации кодировки перед отправкой в браузер:
’
(U+2019
) сначала кодируется как байты UTF-8: 0xE2 0x80 0x99
U+00E2 U+20AC U+2122
одним из кодировок Windows-125X (1252, 1254, 1256 и 1258), все карты 0xE2 0x80 0x99
- U+00E2 U+20AC U+2122
), а затем эти кодовые точки кодируются как байты UTF-8: 0xE2
-> U+00E2
-> 0xC3 0xA2
0x80
-> U+20AC
-> 0xE2 0x82 0xAC
0x99
-> U+2122
- > 0xE2 0x84 0xA2
Вам нужно найти, где выполняется дополнительное преобразование на шаге 2.
Это иногда случается, когда строка преобразуется из Windows-1252 в UTF-8 дважды .
У нас это было в приложении Zend / PHP / MySQL, где такие символы появлялись в базе данных, вероятно, из-за подключения MySQL, не задающего правильный набор символов. Нам пришлось:
UPDATE MyTable SET
MyField1 = CONVERT(CAST(CONVERT(MyField1 USING latin1) AS BINARY) USING utf8),
MyField2 = CONVERT(CAST(CONVERT(MyField2 USING latin1) AS BINARY) USING utf8);
Сделайте это для того, чтобы сколько угодно таблиц / столбцов. Вы также можете исправить некоторые из этих строк в PHP, если это необходимо. Обратите внимание, что поскольку символы были закодированы дважды , нам действительно нужно сделать обратное преобразование из UTF-8 обратно в Windows-1252, что сначала смутило меня.
mb_convert_encoding('’', 'Windows-1252', 'UTF-8'); // returns ’
У меня есть некоторые документы, где …
показывался как …
и ê
показывался как ê
. Вот как это получилось (код python):
# Adam edits original file using windows-1252
windows = '\x85\xea'
# that is HORIZONTAL ELLIPSIS, LATIN SMALL LETTER E WITH CIRCUMFLEX
# Beth reads it correctly as windows-1252 and writes it as utf-8
utf8 = windows.decode("windows-1252").encode("utf-8")
print(utf8)
# Charlie reads it *incorrectly* as windows-1252 writes a twingled utf-8 version
twingled = utf8.decode("windows-1252").encode("utf-8")
print(twingled)
# detwingle by reading as utf-8 and writing as windows-1252 (it's really utf-8)
detwingled = twingled.decode("utf-8").encode("windows-1252")
assert utf8==detwingled
Чтобы исправить эту проблему, я использовал код python следующим образом:
with open("dirty.html","rb") as f:
dt = f.read()
ct = dt.decode("utf8").encode("windows-1252")
with open("clean.html","wb") as g:
g.write(ct)
(поскольку кто-то вставил twingled версии в правильный документ UTF-8, мне на самом деле пришлось извлечь только трясущуюся часть, подключить ее и вставить обратно. Для этого я использовал BeautifulSoup.)
Скорее всего, у вас есть Чарли в создании контента, чем неправильная конфигурация веб-сервера. Вы также можете заставить свой веб-браузер закрутить страницу, выбрав кодировку windows-1252 для документа utf-8. Ваш веб-браузер не может размещать документ, сохраненный Чарли.
Примечание: та же проблема может возникнуть с любой другой однобайтовой кодовой страницей (например, латинским-1), а не с окнами-1252.