Может кто-нибудь сказать мне, что это за персонаж ascii? - PullRequest
4 голосов
/ 16 сентября 2009

У меня иногда появляется этот персонаж, и я не могу найти его в таблице ascii. Я хотел бы запустить фильтр данных, прежде чем они будут отправлены в базу данных, но я должен знать, что это в первую очередь. Может быть, кто-то может подсказать мне. Я использую редактор wysiwyg, и вот откуда он. Персонаж появляется очень редко, но, кажется, появляется чаще, чем когда я делаю два \ backspace.

Вот персонаж

Â

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

adf af  aafd a a

aa a  afa a 

adf

Ответы [ 5 ]

16 голосов
/ 16 сентября 2009

Весьма вероятно, что этот символ связан с проблемами кодировки UTF-8. Статья Джоэла Абсолютный минимум каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Юникоде и наборах символов (без извинений!) определенно рекомендуется для чтения в этом случае.

Отфильтровывать эти символы перед отправкой в ​​базу данных почти наверняка здесь неправильно.

В случае, который вы упоминаете, вы, вероятно, имеете дело с символом U + 00A0, который является символом Unicode для пробела без пробелов. Битовая комбинация для этого символа:

1010 0000

После кодирования UTF-8, где закодированные байты выглядят как

110x xxxx  10xx xxxx

где 'x' представляет бит значения символа Unicode, поэтому U + 00A0 кодируется как:

1100 0010  1010 0000

, что составляет 0xC2 0xA0. По совпадению, второй символ - это то же значение байта, что и исходный символ, который вы кодировали (U + 00A0), тогда как первый символ - это то, что вы видите.

2 голосов
/ 16 сентября 2009

Это «латинская заглавная буква A с круговым сплетением», код HTML Unicode U + 00C2

Wikipage: http://en.wikipedia.org/wiki/%C3%82

1 голос
/ 14 июня 2016

Когда у меня возникает эта проблема, исправление, которое работает для меня, основано на ответе @ Greg, учитывая, что:

0xC2 = 194, 0xA0 = 160,

В php:

$output=str_replace(chr(194).chr(160), " ", $html);

Это отвечает Â с  , которым они должны были быть.

0 голосов
/ 16 сентября 2009

Я думаю, что вы видите ошибку, с которой я когда-то сталкивался. ISO-8859-1 на самом деле является подмножеством Windows-1152 (я думаю, что это 1152) для западноевропейских языков. Проблема в том, что браузеры с радостью отправляют символы Windows-1152, когда веб-сервер принимает ISO-8859-1. Это означает, что браузер отправляет данные, которые являются недействительными ISO-8859-1. По крайней мере, так случилось с моей установкой Windows. Я видел такое поведение как в IE, так и в Firefox.

У меня была проблема с редактором wysiwyg, куда пользователи вставляли данные из документа Word. Этот документ будет содержать как дефисы, так и тире. Один из персонажей будет представлен в порядке. Другой был бы мусором, потому что этот символ не существует в ISO-8859-1 (я никогда не могу вспомнить, какой есть какой).

Платформа .net, которую мы использовали, также не помогла, поскольку она не жаловалась на недопустимый символ ISO при преобразовании в юникод.

0 голосов
/ 16 сентября 2009

Я ОП. Я не вошел в систему, но я вернулся, чтобы поделиться решением. Проблема была на самом деле проблема кодирования. Я добавил:

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

После того, как я это сделал, я заметил, что все еще получаю эти забавные символы в своей базе данных. Затем я изменил кодировку таблицы базы данных, и это тоже ничего не дало. Это только оставило браузер ... Я проверил кодировку в браузере и заметил, что он использует ISO-8859-1. Я изменил кодировку в браузере на utf-8, и теперь она работает нормально. :)

Спасибо всем, кто внес свой вклад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...