Проблемы с набором символов веб-сайта - PullRequest
0 голосов
/ 18 декабря 2010

Я немного запутался с этим целым набором символов.Все выглядит хорошо, когда данные вводятся вручную в веб-сайты и таблицы базы данных.За исключением случаев, когда данные вводятся путем копирования и вставки - наборы символов становятся не по себе.

Я спросил у нескольких клиентов, откуда эти данные получены - большинство, похоже, либо с другого веб-сайта, либо с MSДокумент.

Символы, которые, кажется, путаются, являются общими символами, такими как:

'© "

Что вставляется в черный треугольник с ужасным вопросомmark! На моем сервере у меня есть следующие настройки:

PHP TIDY для очистки текста перед вводом на веб-страницу или в базу данных - output-encoding> UTF-8 Каждая веб-страница имеет метатег> charset = UTF-8Таблицы базы данных по умолчанию> latin1_swedish_ci

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

Справка?

1 Ответ

2 голосов
/ 18 декабря 2010

Это не очень хорошее решение, чтобы заменить умные цитаты. Если вы не можете справиться с умными кавычками или символом авторского права, вы также не справитесь и с любыми другими символами, не относящимися к ASCII, и у вас останется приложение только для ASCII (что в наши дни довольно печально).

Вместо этого вы должны в идеале убедиться, что ваше веб-приложение использует UTF-8 повсеместно, что означает:

  1. Служите всем своим страницам как UTF-8, используя header('Content-Type: text/html; charset=utf-8'); и / или <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>.

  2. Убедитесь, что исходные файлы .php сохранены в формате UTF-8, если они сами содержат символы, не входящие в ASCII.

  3. Используйте mysql_set_charset('utf-8') при подключении к базе данных.

  4. Убедитесь, что ваши таблицы MySQL созданы с UTF-8 CHARACTER SET / COLLATION. Они не будут по умолчанию, если вы не указали их при создании. В этом случае вам потребуется ALTER TABLE в каждом текстовом столбце, чтобы изменить его.

  5. Если вы используете htmlentities() для HTML-экранирования содержимого базы данных при помещении его на страницу, вам нужно передать utf-8 для аргумента $charset, иначе он будет манипулировать всеми не-ASCII-символами, обрабатывая их как ISO-8859-1 (что является никогда правильной кодировкой). Лучше: используйте htmlspecialchars() вместо этого, который не касается символов, не являющихся ASCII, поэтому не волнует.

...