ホームページ  >  記事  >  バックエンド開発  >  Golang html.Parse は & を含むように href クエリ文字列を書き換えます

Golang html.Parse は & を含むように href クエリ文字列を書き換えます

王林
王林転載
2024-02-09 23:42:081158ブラウズ

Golang html.Parse重写href查询字符串以包含&

php エディターの Zimo が、Golang に関するちょっとしたトリックを紹介します。 html.Parse を使用して HTML を解析する場合、href のクエリ文字列を書き換えて & 記号を含める必要がある場合があります。この手法は、HTML リンクを処理する際の柔軟性と利便性を高め、開発効率を向上させるのに役立ちます。次に、このテクニックの使用方法とサンプルコードを詳しく説明し、皆様のお役に立てれば幸いです。

質問内容

次のコードがあります:

リーリー

html.render 関数は次の出力を生成します:

リーリー

なぜクエリ文字列を書き換えて && (bar と baz の間) に変換するのでしょうか?

この動作を回避する方法はありますか?

テンプレート変換を実行しようとしていますが、URL が壊れるのは望ましくありません。

解決策

html.parse 有効な HTML を生成する必要があり、HTML 仕様で href 内のアンパサンド を使用することが規定されている場合属性は Encode する必要があります。

https://www.w3.org/tr/xhtml1/ガイドライン .html#c_12

sgml および xml では、アンパサンド文字 (「&」) はエンティティ参照の開始を宣言します (たとえば、® は登録商標記号「®」を表します)。残念ながら、多くの HTML ユーザー エージェントは、HTML ドキュメント内の & シンボルの誤った使用法を黙って無視します。エンティティ参照のように見えない & シンボルをリテラルの & シンボルとして扱います。 XML ベースのユーザー エージェントは、この誤った使用を許容しません。また、& 記号を誤って使用する文書は「有効」ではないため、この仕様には準拠しません。文書が従来の HTML ユーザー エージェントおよび XML ベースのユーザー エージェントと互換性があることを確認するには、文書内で使用される & 記号 (リテラル文字として扱われる) は、それ自体をエンティティ参照 (「&」など) として表す必要があります。 たとえば、要素の href 属性がパラメーターを含む CGI スクリプトを参照する場合、http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp のように表現する必要があります。 ; name=user http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user の代わりに。

この場合、実際に Go を使用すると HTML がより良く、より効率的になります

そうは言っても、ブラウザはそれをエスケープするので、クリックしても結果の URL は正しいままです (

& ではなく、単に &:

リーリー リーリー

以上がGolang html.Parse は & を含むように href クエリ文字列を書き換えますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。