17

ここ数年、私は多くの PHP プログラミングを行ってきましたが、私を悩ませ続けていることの 1 つは、Unicode とマルチバイト文字列のサポートが弱いことです (確かに、ネイティブには何もありません)。たとえば、「htmlentities」は PHP の世界でよく使用される関数のようですが、すべての文字列をローカライズ可能に保ち、データベースに UTF-8 のみを保存し、UTF のみを配信するように努力すると、非常に面倒であることがわかりました。 -8 Web ページなど 突然、データベースとブラウザの間のどこかに、すべてのバイトが文字であると偽ってすべてを台無しにする、この絶望的に単純な機能があります。

この種の関数をダンプしたいだけです。それらはまったく不要に思えます。最近でも「ä」と書く必要がありますか? 「あ」の代わりに?少なくとも、私の Firefox は、適切なエンコーディングで提供されている限り、最も奇妙なアジアのグリフでも問題なく表示できるようです。

更新:より正確に言うと、HTMLタグを表示する以外に必要な名前付きエンティティです(「<」の「<」など)

更新 2:

@Konrad: いいえ、名前付きエンティティは必要ないと言っていますか?

@Ross:しかし、出力ロジックをそのような問題から解放するために、入力時にユーザー入力をサニタイズする方が良いのではないでしょうか? (もちろん、入力で信頼できるサニタイズが可能であると仮定します-しかし、そうでない場合、出力で可能ですか?)

4

3 に答える 3

7

「実際の」XHTML の名前付きエンティティ (つまりapplication/xhtml+xml、より頻繁に使用されるtext/html互換モードではなく を使用) は推奨されません。XML 自体で定義された 5 つ ( &lt;&gt;&amp;、 ) を除いて、それらはすべて&quot;&apos;使用している特定の DocType の DTD で定義する必要があります。つまり、ブラウザーはその DocType を明示的にサポートする必要がありますが、これは与えられたものとはかけ離れています。一方、番号付きエンティティでは、正しい Unicode 文字を取得するためにルックアップ テーブルのみが必要なのは明らかです。

最近エンティティが必要かどうかについては、最近のブラウザは UTF-8 をサポートしているとほぼ期待できます。したがって、データベース、マークアップ、および Web サーバーのすべてがそれを提供することに同意することを保証できる限り、エンティティを捨ててください。

于 2008-08-24T16:44:04.450 に答える
3

XHTML を使用している場合は、実際には名前付きエンティティを使用しないことをお勧めします ([要出典])。一部のブラウザー (Firefox など) は、これを XML として解析する場合 (通常は解析しません)、DTD ファイルを読み取らないため、エンティティを処理できません。

とにかくやむを得ない理由がなければエンコーディングとして UTF-8 を使用するのがベスト プラクティスであるため、これはドキュメントの作成者がドキュメントを処理できるだけでなく、適切な入力方法を提供する適切なエディターを必要とすることを意味します。ダイバーのグリフ。OS X では、ほとんどの必要なグリフに「alt」キーでアクセスできるため、この問題は実際にはありませんが、Windows にはこの機能がありません。


@Konrad: いいえ、名前付きエンティティは必要ないと言っていますか?

正確に。もちろん、ばかげた制限がある場合を除きます。たとえば、UTF-8 でチョークするレガシー データベース ドライバなどです。

于 2008-08-24T16:17:09.723 に答える
0

Safari には一部のグリフに問題があるようですが、他のグリフには問題がないようです。必要ではないかもしれませんが、そうするのがおそらく最善です。もちろん、これは私の意見であり、私自身の観察以外に裏付けられたものではありません。

于 2008-08-24T16:07:07.987 に答える