1

皆さんは私が思っていた前に質問に答えるという素晴らしい仕事をしました-私が何か間違ったことをしたことを知るために私の変換に深く入り込む前に、私はこれを尋ねます. 自分で作っているウェブサイトに 3 ページしかありません。フォーム、sqli db があります。UTF-8 を使用するように言われました (部分的に使用しましたが、完全には使用しませんでした) 笑。いいですね。100% UTF-8 に対応するように修正したいので、マルチバイト関数を使用せずに PHP、JS、および HTML で約 1,900 行のコードを記述しました。私はこれを行いました...(さまざまな場所からのコードの抜粋...)

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 DB (まだ 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) DB にはどれを使用しますか? utf8_general_ci または utf8_unicode_ci

5)大文字と小文字を区別する必要があります。utf8 の ci しか表示されません。これは、「Dave」が「dave」とは異なるため、マルチバイト比較を使用すると自動的に大文字と小文字が比較されるためですか...??!?!?!

6)私のDBは現在、ASCIIのストレージ用に50文字と言います-DBでutf-8に切り替えることで、私のような英語の人にとっては50のストレージで問題ないと思います-しかし、外国人が来てたくさんの文字を入力した場合ユニコードの余分なバイトをすべて収容するには、ストレージを x4 増やす必要がありますか? より多くのストレージを使い果たしてもかまいませんが、これを割り当てる適切な方法がどのようになるか興味があります。そして、それは VARCHAR(50) であるため、とにかく本当に重要でしょうか? 名前が「Dave」の場合、4 文字になります。外国の名前だったら、記号の「デイブ」は12文字かもしれません!笑。したがって、ユーザー名フィールドに 100 を割り当てると、すべての文字が 4 バイトになる可能性は低いため、これを行う必要があります。または、英語の場合と同じようにx4に設定し、すべてVARCHARSにしてスペースを節約します。彼らがフォームにデータを入力するとき、私は MB_LENGTH 関数を使用します (正確な関数は忘れました) ので、入力する文字数を制御できます。

7) Unicode Web サイトをテストするにはどうすればよいですか? 私は美しい英語以外は何も使ったことがありません:)笑。ブラウザを切り替えるにはどうすればよいですか? 私が別の場所から来たふりをして、コードの山を入力し、mb_ (マルチバイト) 関数を使用するように書き直したら、関数が機能するかどうかを確認します。または、切り替えるものは何もありません... ALT 245 または何かを入力するだけで、記号が表示されますか?!?!? 外国人テスト文字の入力方法がわからない!ウェブサイトを十分にテストしていないため、すべての外国の顧客がパスワードを入力できないようにするためだけに英語を機能させるのは最悪です:)

8)特定の関数 ctype、mb_ を使用して Unicode 比較、文字列などを処理することを知っています。正常に機能しないものはありますか?

はい... 私は言葉が多いです !:) 私は Dreamweaver CS3 を使用していますが、それは問題ではありません。実際のファイルには UTF-8 文字が埋め込まれていません。

皆様の知恵をお待ちしております...

4

2 に答える 2

1

私はいくつかの答えから始めます:

2) サーバーは、送信されたコンテンツが UTF-8 であることを示すヘッダーも送信する必要があります。

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

3) ブラウザはデータを UTF-8 で送信します。はい。htmlententiesただし、ハッカーはそうしない可能性があるため、同様の HTML エンコーディング関数で UTF-8-Charset を指定する必要もあります(エクスプロイトの例を参照) 。

5) 大文字と小文字を区別しない照合は、WHERE 句を実行するときに大文字と小文字が区別されないことを意味するだけです。

6) 実際には逆です: ASCII では、UTF-8 よりも大きな VARCHAR が必要になる場合があります (「Dave」は 4 文字、4 バイト、「ǝʌɐp」は 4 文字、8 バイトです)。

于 2011-07-31T18:18:53.783 に答える
0

1) Set locale informationについては、一部の文字列関数 (つまりstrtoupper()) に影響を与えることができます。その目的は影響を与え、一部の「もの」の動作方法を変更することです。たとえば、正規表現内では、\w \W(Word 文字の) 期待される方法が変わります。しかし、ますます多くのアプリケーションが 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"];
于 2011-07-31T19:46:55.407 に答える