いつHTMLエンティティを使用すべきですか?


115

これはしばらくの間私を混乱させてきました。Web開発のデファクトスタンダードとしてのUTF-8の登場により、どのような状況でHTMLエンティティを使用することになっているか、どのエンティティにUTF-8文字を使用すればよいかわかりません。例えば、

  • 全角ダッシュ(–、&emdash;
  • アンパサンド(&、&
  • 3/4分数(¾、¾

この問題に光を当ててください。よろしくお願いします。


余談ですが、PHPのhtmlentities()は何をしますか?
ジョーフィリップス

それは私には思えるの回答やコメントを読むことが、まだどちらか一方を支持する普遍的原則ではなく、答えはまだそれが依存します
Majid Fouladpour

回答:


76

エディターがUnicodeをサポートしている場合は、通常、HTML文字エンティティを使用する必要はありません。エンティティは次の場合に役立ちます。

  • キーボードは、入力する必要のある文字をサポートしていません。たとえば、多くのキーボードにはem-dashや著作権記号がありません。
  • お使いのエディターはUnicodeをサポートしていません(数年前はごく一般的ですが、おそらく今日はそうではありません)。
  • 何が起こっているのかをソースで明示したいとします。たとえば、 コードは対応する空白文字よりも明確です。
  • あなたのようなHTMLの特殊文字をエスケープする必要がある<&または"

1
非常に役立ちます。ありがとう。珍しいキャラクターを手に入れるのに役立つプログラムを使っています。それはのPopCharと呼ばれていますし、ErgonisによってなされるだけでOS X用です
allesklar

3
補足:Wikipedia &nbsp;は、実際の空白文字の代わりに依然義務付けています。これは、FirefoxがフォームでU + 00A0をU + 0020に変換するためです。したがって、その場合にエンティティを使用することが、Firefoxユーザーが編集するたびにソースがめちゃくちゃにならないようにする唯一の方法です。
ジョーイ

2
細かい要約ですが、最後のポイントに関しては、<エスケープが必要になることはよくあります>(そして、"属性値の内部でまれにしかエスケープする必要がありません)。
Jukka K. Korpela、2013年

&nbsp;を保持するもう1つの理由 HTMLページに複数のスペースを表示できるようにするためです。
zylstra 2016年

したがって、&amp;常に代わりに使用する必要があり&ますか?これには理由がありますか?
プロメテウス

116

私は受け取ったコメントに基づいて、これについてもう少し詳しく調べました。現在のところ、ベストプラクティスはHTMLエンティティの使用をやめて、代わりに実際のUTF-8文字を使用することです。記載されている理由は次のとおりです。

  1. UTF-8エンコーディングは、文字の意味を理解し、文字の入力方法を知っている人にとって、読みやすく、編集しやすくなっています。
  2. UTF-8エンコーディングは、理解できない人にとってはHTMLエンティティエンコーディングと同じように理解できませんが、10進または16進エンコーディングを理解するのではなく、特殊文字としてレンダリングするという利点があります。

ページのエンコーディングがUTF-8に正しく設定されている限り、HTMLエンティティではなく実際の文字を使用する必要があります。このトピックに関するいくつかのドキュメントを読みましたが、最も役に立ったのは次のとおりです。

文字エンコーディングの秘密:UTF-8の記事:

ウィキペディアは、もともとISO-8859-1を使用していたが、煩雑になりすぎて外国語をサポートできなくなったときにUTF-8に切り替えられたアプリケーションの優れたケーススタディです。ボットは、使いやすさと検索のしやすさのために、実際に記事を読み、文字エンティティを対応する実際の文字に変換します。

その記事は、中国語のエンコーディングを含む良い例も示しています。以下に、怠惰のための省略例を示します。

UTF-8:

這兩個字是甚麼意思

HTMLエンティティ

&#36889;&#20841;&#20491;&#23383;&#26159;&#29978;&#40636;&#24847;&#24605;

UTF-8とHTMLエンティティのエンコーディングはどちらも私には意味がありませんが、少なくともUTF-8エンコーディングは外国語として認識でき、編集ボックスで適切にレンダリングされます。この記事では、HTMLエンティティエンコードバージョンについて次のように述べています。

キャラクターエンティティが実際に何であるかを知っている私たちにとっては非常に不便です。知らない貧しいユーザーにはまったく理解できません!&theta;のような、少しだけユーザーフレンドリーで「わかりやすい」キャラクターエンティティですらあります。HTMLの学習に興味がないユーザーが頭を悩ませるでしょう。一方、エディットボックスにθが表示されている場合、彼らは特殊文字であることを知っているので、自分でその文字の書き方を知らなくても、それに応じて扱います。

他の人が指摘したように、予約済みのXML文字(アンパサンド、小なり、大なり)には引き続きHTMLエンティティを使用する必要があります。


この答えは非常に役立ちます。しかし明確にするために、私自身の理解のために:&entity;宣言されたUTF-8文字セットを使用してHTMLドキュメント内で構文を使用することには、危険または無効なことは何もありません、正しい?あなたがリストした理由でプレーンなUTF-8文字の方が良いですが、同じドキュメント内にいくつかのHTMLエンティティが並んでいても問題はありませんか?
ジェイコブフォード

@JacobFordそうです、HTMLエンティティとUTF-8文字を混在させることは危険でも無効でもありません。ソースを読んでいる人を混乱させる可能性があるだけです。
William Brendel

5

視覚的に混乱しやすい文字にはUTF-8を使用しません。たとえば、emdashとマイナス、または特に改行なしスペースとスペースを区別することは困難です。これらのキャラクターには、必ずエンティティを使用してください。

視覚的に理解しやすい文字(上記の中国語の例など)の場合は、必要に応じてUTF-8を使用してください。


5

個人的に私は長い間utf-8ですべてを行っていますが、htmlページでは、アンパサンド(&)、(>)より大きく(<)よりも小さい文字を、対応するエンティティ&amp;に常に変換する必要があります。 &gt; と&lt;

また、utf-8テキストを使用してプログラミングを行う予定がある場合は、注意する点がいくつかあります。

  • エンティティを使用する場合、XMLは検証するために追加の行を必要とします。
  • 一部のライブラリは、utf-8とうまく連動しません。たとえば、一部のLinuxディストリビューションのPHPでは、正規表現ライブラリでのutf-8の完全サポートが廃止されました。
  • 単一のエンティティは多くの文字を使用するため、htmlエンティティを使用するテキストの文字数を制限することは困難です。また、エンティティを半分にするリスクが常にあります。

これは非常にマイナーなポイントですが、より大きい(>)をエンコードする必要はなく、(<)未満のみをエンコードする必要があります。
Codemonkey 2018年

4

エンティティは、エンコーディングを正しく理解しない頭の悪いクライアントとの互換性をあなたに買うかもしれません。これには現在のブラウザが含まれているとは思わないが、他の種類のプログラムがどのような問題を引き起こしているのか、あなたにはわからない。

ただし、より便利なのは、HTMLエンティティが自分のエラーから保護することです。サーバーで何かを誤って構成し、それがであることを示すHTTPヘッダーISO-8859-1と、それがであることを示すMETAタグが付いたページを提供すると、UTF-8少なくとも&mdash; es常に動作します。


5
ただし、反対の引数&mdashをとることもできます。ヘッダーが正しく構成されていなくても正しく表示されるため、問題の検出が難しくなります。
Pekka

4

HTMLエンティティは、(いくつかの)異なるエンコーディングのページに(動的に)組み込まれるコンテンツを生成する場合に便利です。たとえば、ISO-8859-1とUTF-8でエンコードされたWebページの両方に含まれているホワイトラベルコンテンツがあります...

UTF-8との間の文字セット変換がそれほど大きな信頼性のない混乱ではない場合(常に、適切に変換されない一部の文字とツールにつまずく)、UTF-8で標準化するのが適切です。


2

ページがutf-8で正しくエンコードされている場合は、htmlエンティティは必要ありません。必要な文字を直接使用してください。


3
予約された文字をエンコードするためにそれらがまだ必要だと思います。
rmeador 2009年

@rmeador-私はそれに同意します。
オタビオデシオ2009年

2

以前のすべての答えは私には理にかなっています。

さらに、それは主に、使用するエディタとドキュメントの言語に依存します。エディターの最小要件として、それはドキュメント言語をサポートすることです。つまり、テキストが日本語の場合は、テキストを表示しない(つまり、ドキュメント自体のエンティティがない)エディタを使用することに注意してください。英語の場合は、古いvimのようなエディターを使用して、相対的にめったにないエンティティを使用することもできます&copy; と友達。もちろん:&gt; for>およびその他のHTMLスペシャルには、依然としてエスケープが必要です。しかし、他のラテン1言語(ドイツ語、フランス語など)を使用しても、äを書くのは苦痛です。

さらに、私は目に見えない文字のエンティティや、標準ASCIIに似ているため簡単に混乱するエンティティを個人的に作成しています。たとえば、u1173(一部の文字セットではダッシュのように見えます)または垂直バーのように見えるu1175があります。いずれにせよ、エンティティにはエンティティを使用します。


&gt; >には必要ありません。>を使用できます。&lt; ただし、<には必要です。
Codemonkey、2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.