技術的には、私のテストによると、エスケープする必要があります。しかし、良い面はarg()、直接のユーザー入力を常に使用するわけではないということです。
URL (より正確には$_GET['q']) がの場合、チェックなしnode/<h3>/editでarg(1)返されます。<h3>自分でテストしたい場合は、以下のスニペットを追加して自分で確認してください。
<?php
echo (arg(1, 'node/<h3>/edit')); ?>Normal text
h3 に「通常のテキスト」が表示されます。
ノードの ID が 4 の場合、ノードを表示$_GET['q']すると node/4 になります。パスがエイリアス化されていない場合、URL は同じになります。上記の例のように、ユーザーが を開いた場合、node/<h3>エスケープする必要はありarg(1)ませんが、そのページが 404 の結果を返すため (ブロック、ページ コンテンツなどが表示<h3>されない場合)、使用したスニペットがユーザーに表示されるかどうかは疑問です。arg())。
arg()in t()、 url() 、およびその他の関数を使用すると、l()常に結果がエスケープ/サニタイズされるため、実際の世界では、誰かがサイトを XSS できる実際のケースを見つけることはまずありません。
これが私が考えることができる悪い使用法です。page.tpl.php ファイルでは、次のように URL パスからクラスを追加できます。
<body class="<?php print arg(0); ?>">
ノード ページではボディ タグのクラスが「node」であり、管理ページではクラスが「admin」であると予想できます。しかし、ユーザーが次のようなページを開いたとします。
http://example.com/" onclick="alert('You are clicking on me');"
body タグの実際の HTML は次のようになります。
<body class="" onclick="alert('You are clicking on me');">
body タグに空の class 属性があり、body にも onclick イベントが追加されていることがわかります。これは最悪の例かもしれませんが、実際の例をお見せしたかっただけです。使用し$node->nidても安全です。