Справка по конверсии веб-сайта - UTF-8, охватывающая все базы... функции, метас и sql utf-8
Вы все проделали такую удивительную работу, отвечая на вопрос, который я думал раньше - я спрошу этот вопрос, прежде чем углубиться в свое обращение, только чтобы узнать, что я сделал что-то не так. У меня только 3 страницы на сайте, который я делаю для себя. У него есть формы, sqli db. Мне сказали использовать UTF-8 (я частично сделал, но не полностью) LOL. Ок, звучит круто. Теперь, когда я хочу исправить это, чтобы быть на 100% знающим UTF-8, я уже написал около 1900 строк кода на PHP, JS и HTML без использования многобайтовых функций... ТАК... вот мой вопрос... в моем преобразовании Я сделал это... (фрагменты кода из разных мест...)
PHP
date_default_timezone_set('America/Toronto'); // sets the timezone to Eastern Stand Time
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
так далее
SQL
(из интерфейса cpanel) Параметры сортировки соединения MySQL ": utf8_general_ci
БД SQL (все еще в режиме pre utf-8)
имя пользователя varchar(50) latin1_general_cs
название компании varchar (50) latin1_swedish_ci
fname varchar (25) latin1_swedish_ci
У меня нет Ценных данных в таблицах. Я буду менять их на один из следующих (я не уверен, какой, однако)...
utf8_general_ci или utf8_unicode_ci
Хотя я хотел бы сделать сайт доступным для иностранцев, он не является приоритетным, НО, поскольку я делаю его в стиле UTF-8, он, вероятно, уже будет работать для иностранных языков.
Мои вопросы...
1) Я установил свой часовой пояс, я не установил свой язык в php, потому что я никогда этого не делал. Мне нужно это сделать? Как я могу это сделать для моего Торонто / Канада?
2) Достаточно ли хорошо настроить каждую страницу с помощью метатега, чтобы сделать всю страницу UTF-8?
3) Использование метатега означает ли это, что все мои поля формы уже вводятся как данные UTF-8? Если нет, как я могу изменить это, чтобы они были.
4) Какой мне использовать для моей БД? utf8_general_ci или utf8_unicode_ci
5) Мне нужны определенные вещи, чтобы быть чувствительными к регистру. Я вижу только ci для utf8. Это потому, что "Dave" отличается от "Dave", поэтому использование многобайтовых сравнений автоматически сравнивает регистр...??!?!?!
6) В моей БД в настоящее время хранится, скажем, 50 символов для хранения ASCII - я предполагаю, что, переключившись на utf-8 в БД, что для англичан, таких как я, 50 хранилищ будет в порядке - но если какой-то иностранный человек придет и войдет в куча странных символов, мне нужно было бы увеличить объем памяти на х4, чтобы вместить все дополнительные байты для юникода? Я не против использовать больше памяти, но мне любопытно, как правильно распределить это. А так как это VARCHAR(50), это действительно имеет значение? Если имя "Дейв", это будет 4 символа. Если бы это было какое-то иностранное имя, "Дейв" в символах может быть 12 символов! лол. Итак, если я выделю, скажем, 100 в поле имени пользователя, которое следует делать, поскольку маловероятно, что ВСЕ символы будут 4 байта. Или просто установите его на x4, что я бы сделал для английского языка, и сделайте все VARCHARS для экономии места. Когда они вводят данные в форму, я буду использовать функции MB_LENGTH (я забыл точную функцию), поэтому я все еще смогу контролировать, сколько символов будет введено.
7) Как я могу протестировать мой сайт с юникодом? Я никогда не использовал ничего, кроме красивого английского:) LOL. Как я могу переключить свой браузер? чтобы притвориться, будто я откуда-то еще, ввести кучу кодов и посмотреть, работают ли мои функции, как только я переписываю их для использования функций mb_ (multibyte). Или же нечего переключать... Я просто набираю ALT 245 или еще что-то и получаю символы?!?!? Я не знаю, как ввести иностранные тестовые символы! Было бы плохо, если бы английский работал только для того, чтобы все иностранные клиенты не могли ввести пароль, потому что я недостаточно тестировал свой веб-сайт:)
8) Я знаю, как использовать определенные функции ctype, mb_ для обработки сравнений Unicode, строк и т. Д. Какие-нибудь сюрпризы для меня? Вещи, которые не работают, как они должны?
Да... я многословен!:) Я использую Dreamweaver CS3, но это не должно иметь значения. В моих реальных файлах нет символов UTF-8.
В ожидании всей вашей мудрости...
2 ответа
Я начну с некоторых ответов:
2) Ваш сервер также должен отправлять заголовки, которые указывают, что отправляемый контент находится в UTF-8:
header('Content-Type: text/html; charset=UTF-8');
3) Браузеры будут отправлять свои данные в формате UTF-8, да. Но хакеры не могут, так что вы должны также в вашем htmlententies
и аналогичная функция HTML-кодирования дают кодировку UTF-8-Charset (см. пример использования)
5) Сравнение без учета регистра означает только то, что при выполнении предложения WHERE регистр не играет роли.
6) На самом деле все наоборот: в ASCII вам может понадобиться больший VARCHAR, чем в UTF-8 ("Dave" - 4 символа, 4 байта; "ǝʌɐp" - 4 символа, 8 байтов).
1) Об установке информации о локали, это может повлиять на некоторые строковые функции (т.е. strtoupper()
), его цель - повлиять и изменить способ действия некоторых "вещей". Например, в регулярном выражении это меняет способ \w \W
(Слово символов) ожидается. Но по мере того, как все больше и больше приложений переходят на использование Unicode, ожидается, что потребность в такой поддержке локали отпадет.
7) W3C может вам немного помочь.
О тестировании персонажей и представлении, что вы другой человек из Китая или другого места:
index.php:
<head>
<meta charset="UTF-8"><!-- This tag encode the text that will be typed within a text area (If the accep-charset="" is not speciefied)
If the character typed isnt part of the encoding the character will be escaped**-->
</head>
<form method="POST" action="encode.php" accept-charset="UTF-8"><!--accept-charset"" is used to set the encoding that will be used to transmit the characters over a form-->
<p><textarea name="input" maxlength="256" rows="5" cols="100"></textarea></p>
<p><button>Submit</button></p>
</form>
Затем в файле encode.php вы можете управлять своим вводом с помощью:
$input=$_POST["input"];