18

href 属性のコンテンツに対して何をすべきか: HTML または URL エンコーディング?

<a href="???">link text</a>

一方では、href 属性に URL が含まれているため、URL エンコーディングを使用する必要があります。一方、この URL を HTML に挿入しているので、HTML エンコードする必要があります。

この矛盾を克服するために私を助けてください。

ありがとう。


編集:

ここに矛盾があります。URL に「<」と「>」の文字が含まれている可能性があるとします。URL エンコーディングではエスケープされないため、href 属性内に予約済みの HTML 文字が含まれ、標準に違反します。HTML エンコーディングは「<」および「>」文字をエスケープし、HTML は有効になりますが、その後 URL に予期しない「&」文字が含まれます (これは URL の予約文字であり、クエリ文字列パラメーターの区切り文字として使用されます)。 .

予約済みの URL 文字は、URLではなく HTML 用に予約されている「<」と「>」を除いて、予約済みの HTML 文字のスーパーセットを形成します。


編集2:

私は '<' と '>' 文字について間違っていました。実際には URL エンコーディングによってパーセント エスケープされています。なら、この場合は URL エンコーディングで十分ですよね。

4

1 に答える 1

20

通常どおり URL を作成します。URL を構成するための規則に従います。入力したデータをエンコードします。

次に、通常どおり HTML を作成します。HTML を構築するための規則に従います。データを入れたままエンコードします。

つまり、両方を実行します (ただし、正しい順序で)。

それらは相互に排他的ではないので、矛盾はありません。

例 (これは、$_GET 内のデータが正しく存在することを前提とした単純化された例です。実際にはそうしないでください):

$search_term = $_GET['q'];
$page = $_GET['page'];
$next_page = $page + 1;
$next_page_url = 'http://example.com/search?q=' . urlencode($search_term) . '&page=' . urlencode($next_page);
$html = '<a href="' . htmlspecialchars($next_page_url) . '">link text</a>';
于 2012-04-17T10:30:40.917 に答える