誰かが URL の末尾に 16 進値を追加した場合に、特定のページを表示できるようにしたいと考えています。
たとえば、colors.com を持っているとします。誰かが colors.com/FF0000 にアクセスしたい場合、ページにその 16 進数が表示されます。16進値のみにしたいのですが、URLから取得して表示することは可能ですか。
特定の文字や特殊文字を削除して、誰かがテキストだけを使用できないようにします。
それが理にかなっていることを願っています。
Web サーバーの URL 書き換えを使用して、16 進数の色 (6 文字の A ~ F と数字の 0 ~ 9) のようなパターンに一致させ、それに応じてルーティングする必要があります。
example.com/AA00FF
サイレントリライトするApache mod_rewrite の例example.com/index.php?color=AA00FF
:
RewriteEngine On
# [A-Fa-f0-9]{6} matches six letters A-F and digits 0-9.
RewriteRule ^([A-Fa-f0-9]{6})$ index.php?color=$1 [L]
PHP スクリプトindex.php
で、から取得します$_GET['color']
。その正規表現についても PHP で検証する必要があります。そうしないと、XSS 攻撃の危険があります。
// You MUST validate it in PHP as well, to avoid XSS attacks when you insert it into HTML
if (preg_match('/^[A-Z0-9]{6}$/i', $_GET['color'])) {
// ok to use
}
else {
// Invalid hex color value. Don't use it!
}
これが良い考えだと言っているわけではありませんが、ボディの色を設定するには、次のようにします。
// Last warning: DON'T DO THIS UNLESS YOU HAVE VALIDATED WITH THE REGEX ABOVE!
echo "<body style='background-color: #{$_GET['color']}'>";
サーバーが URL をスクリプトにマッピングしていると仮定すると、 から取得できます$_SERVER['REQUEST_URI']
。
簡単な正規表現を使用して、16 進数の RGB カラーであることを確認できます。