2012-02-15 22 views
6

mysqlデータベースに特殊文字や記号を格納する必要があります。だから私はそれを 'ü'のように保存するか、それを '& uuml;のようなHTMLコードに変換することができます。データベースにデータを格納するときにHTMLエンティティを使用する必要がありますか?

どちらが良いか分かりません。

また、私は '♥'、 '' 'のようなシンボルを持っています。

いずれか良い方をお勧めしますか?他の方法があるかどうかもお勧めします。

ありがとうございました。

+0

あなたのタイトルを少し変更する自由を取った - あなたのタイトルは問題ありませんでしたが、このやり方で、将来の同様の質問を見つけるのは簡単です。 (私はちょうど検索し、これを見つけるのが簡単ではないことを認識しました) –

+1

これは、HTMLを格納する場所で使用されている文字セットによって異なります。通常は、すべての文字をカバーする文字セットを使用する必要があります(したがって、「特別」なのではありません)。データは正規化された形式で格納でき、データベースの各テキストフィールドには文字エンコーディングの横に特殊なエンコーディングは含まれませんとにかく – hakre

+0

@Pekkaそれは問題ありません。このように他の人に役立つなら、私はあなたに感謝しなければなりません。 –

答えて

5

HTMLエンティティは、輸送がバイナリセーフではない場合、およびユーザーエージェント(ブラウザ)がトランスポート層またはサーバーの文字コードエンコーディングをサポートしていない場合に、ワイヤを介して文字情報を転送するために数年前に導入されました。

HTMLエンティティはごく基本的な文字(&;a-z0-9)とそれらの文字が含まれていたよう

は、ほとんどの文字セットで同じバイナリエンコーディングを持っている、これがあると、それらの副作用から非常に安全でした。

データベースに何かを保存すると、通常は制御されているため、データベースに何がどのように格納されるのかが分かっているため、これらの問題は発生しません。

たとえば、データベース内のテキストにUnicodeを許可すると、すべての文字を格納できますが、実際には特別なものはありません。ここでデータベースを知る必要があることに注意してください。いくつかの技術的な詳細があります。データベース接続のための文字セットエンコーディングがわからないので、そこに格納するテキストをデータベースに正確に伝えることはできません。しかし、一般的に、テキストを保存して後で取得するだけです。対処する特別なものはありません。あなたが代わりにプレーンな文字のHTMLエンティティを使用する場合

は、実際には欠点があります:üはLATIN-1でüよりもはるかに大きい、UTF-8、UTF-16:

  • HTMLエンティティは、より多くのスペースを消費しますまたはUTF-32。
  • HTMLエンティティは、さらに処理が必要です。それらは作成する必要があり、読み込んだときに解析する必要があります。データベース内の特定のテキストを検索する必要があると想像してください。そうでない場合は、追加の処理が必要になります。それはちょうどオーバーヘッドです。

本当の楽しみは、両方のコンセプトをミックスするときに始まります。あなたは本当に行きたくない場所に来る。あなたがそれを必要としないので、ただしないでください。

+0

これは5歳ですが、私は最後の段落で言及した「本当の楽しみ」に証言したいと思います。我々は 'latin1' ANDフィールドと' utf-8'照合フィールドを持つテーブルをたくさん持っているMySqlデータベースを持っています。私たちは特殊文字(主に登録商標と商標)とhtmlエンティティ(場合によっては二重エンコードされたhtmlエンティティ、つまり '& reg; ')をデータベースに保存しました。少年少女は、この道を下ってはいけません。データベースに文字を格納し、それに固執する方法については、賢明な決定を下します。データを取り出すときは、必要に応じて変更することができます。 – DerProgrammer

5

データをそのままデータベースに残しておきます。 HTMLのエンティティは、HTMLに必要となるまで使用しないでください。いつ他の場所でデータを使用したいのか、Webページで使用したくないのかはわかりません。

+1

+1ですが、HTMLを出力するときには 'htmlentities'も必要ありません。これは' htmlspecialchars() 'がXSSを防ぐために行います。 'htmlentities'は適切に設定された環境では決して*必要ないはずです –

+1

@Pekka、私は関数の使用を提案していませんでした。はい、 'htmlspecialchars()'は実際にデータを出力するための好ましい方法です。 – Brad

1

私の提案は他の投稿者を反映していますが、をデータベースに保存する際に変換しないでください。変換に対する

いくつかの理由:

  • K.I.S.S principle(それを行うにはない、私の最大の理由)
  • ほとんど実体が前に能力を失う
  • 変換されることに、より多くのスペースを消費することになりますエンティティüを単語で検索すると[word]+ü+[/word]となり、ü =>[word]+ü+[/word]のhtmlに相当する文字列比較を行う必要があります。
  • あなたの出力がHTMLから、モバイルなどのAPIに変わる可能性があります。
  • は、データの入力時に変換する必要があり、出力時には(出力がプレーンHTMLから別のものに変更された場合も)。