Справка по конверсии веб-сайта - UTF-8, охватывающая все базы ... функции, метас и sql utf-8 - PullRequest
1 голос
/ 31 июля 2011

Вы все проделали такую ​​удивительную работу, отвечая на вопрос, который я раньше думал - я спрошу этот вопрос, прежде чем углубиться в свое обращение, только чтобы узнать, что я сделал что-то не так.У меня только 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

имя_архива 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) Как я могу проверить свой сайт Unicode?Я никогда не использовал ничего, кроме красивого английского :) LOL.Как я могу переключить свой браузер?чтобы притвориться, будто я откуда-то еще, ввести кучу кодов и посмотреть, работают ли мои функции, как только я переписываю их, чтобы использовать функции mb_ (multibyte).Или же нечего переключать ... Я просто набираю ALT 245 или еще что-то и получаю символы?!?!?Я не знаю, как ввести иностранные тестовые символы!Было бы плохо, если бы английский работал только для того, чтобы все иностранные клиенты не могли ввести пароль, потому что я недостаточно тестировал свой веб-сайт:)

8) Я знаю, как использовать определенные функции ctype, mb_ для обработки сравнений Unicode, строк и т. Д. У меня есть какие-нибудь сюрпризы? Вещи, которые не работают как следует?

Да ... я многословен! :) Я использую Dreamweaver CS3, но это не должно иметь значения. В моих реальных файлах нет символов UTF-8.

В ожидании всей вашей мудрости ...

Ответы [ 2 ]

1 голос
/ 31 июля 2011

Я начну с некоторых ответов:

2) Ваш сервер должен также отправлять заголовки, которые указывают, что отправляемый контент находится в формате UTF-8:

header('Content-Type: text/html; charset=UTF-8');

3)Браузеры отправят свои данные в UTF-8, да.Но хакеры могут этого не делать, поэтому вы также должны в своей htmlententies и аналогичной функции кодирования HTML дать кодировку UTF-8-код (см. пример эксплойта )

5) Сортировка без учета регистраозначает только то, что при выполнении предложения WHERE регистр не играет роли.

6) На самом деле все наоборот: в ASCII вам может понадобиться больший VARCHAR, чем в UTF-8 («Дейв»)."4 символа, 4 байта;" ǝʌɐp "4 символа, 8 байтов.)

0 голосов
/ 31 июля 2011

1) О Установить информацию о локали , она может влиять на некоторые строковые функции (например, strtoupper()), ее назначение - влиять и изменять способ работы некоторых «вещей».Например, в регулярном выражении он изменяет способ ожидания \w \W (символы Word).Но по мере того, как все больше и больше приложений переходят на использование Юникода, ожидается, что потребность в этой поддержке локали отпадет.

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"];
...