Unicode対応ブラウザの時代には、HTMLの名前付きエンティティはまだ必要ですか?
-
09-06-2019 - |
質問
ここ数年、多くのPHPプログラミングを行いましたが、私を悩ませる1つのことは、Unicodeとマルチバイト文字列のサポートが弱いことです(確かに、ネイティブには何もありません)。たとえば、<!> quot; htmlentities <!> quot; PHPの世界ではよく使われている関数のようです。すべての文字列をローカライズ可能に保ち、データベースにUTF-8のみを保存し、UTF-8 Webページのみを配信するなどの努力をすると、本当に面倒です。 、データベースとブラウザの間のどこかに、すべてのバイトが文字であり、すべてを台無しにするふりをするこの絶望的に素朴な関数があります。
この種の関数をダンプしたいのは大好きだけです。 「<!> amp; auml;」と書くことは今でも必要ですか? '<!>#228;'の代わりに?少なくとも私のFirefoxは、適切なエンコードで提供されている限り、最も奇妙なアジアのグリフを表示するのに完全に満足しているようです。
更新:より正確に言うと、 HTMLタグの表示以外のものに必要な名前付きエンティティ(<!> quot; <!> amp; lt; <!> quot; for <!> quot; <!> lt; <!> quot;)
更新2:
@Konrad:名前付きエンティティは必要ないということですか?
@Ross:しかし、入力ロジックをそのような問題から解放するために、入力時にユーザー入力をサニタイズする方が良いでしょうか? (もちろん、入力での信頼できるサニタイズが可能であると仮定します-しかし、そうでない場合は、出力でサニタイズできますか?)
解決
<!> quot; real <!> quot;の名前付きエンティティXHTML(つまり、より頻繁に使用されるapplication/xhtml+xml
互換モードではなくtext/html
を使用)は推奨されません。 XML自体で定義されている5つ(<
、>
、&
、"
、'
)を除き、これらはすべて、使用している特定のDocTypeのDTDで定義する必要があります。つまり、ブラウザはそのDocTypeを明示的にサポートする必要がありますが、これは与えられたものとはほど遠いものです。一方、番号付きエンティティは、正しいUnicode文字を取得するためにルックアップテーブルのみを必要とします。
これらすべての日でエンティティが必要かどうかについては、最新のブラウザがUTF-8をサポートしていることを期待できます。したがって、データベース、マークアップ、およびWebサーバーのすべてがそれを提供することに同意することを保証できる限り、エンティティを捨てます。
他のヒント
XHTMLを使用する場合、実際には名前付きエンティティを使用しないことをお勧めします([引用が必要])。一部のブラウザ(Firefox <!>#8230;)は、これをXMLとして解析する場合(通常は解析しません)、DTDファイルを読み取らないため、エンティティを処理できません。
とにかくやむを得ない理由がない場合はエンコードとしてUTF-8を使用するのがベストプラクティスであるため、これは、ドキュメントの作成者がドキュメントを処理できるだけでなく、優れたエディターを必要とすることを意味しますダイバーのグリフを入力する方法。ほとんどの必要なグリフは<!>#8220; alt <!>#8221;キーを押しますが、Windowsにはこの機能はありません。
@Konrad:名前付きエンティティは必要ないということですか?
正確に。もちろん、愚かな制限がない限り、例えばUTF-8などで停止するレガシーデータベースドライバ。
Safariは一部のグリフには問題があるようですが、他のグリフには問題がないようです。必要ではないかもしれませんが、おそらくそうするのが最善です。もちろん、これは私の意見であり、独自の観測。