如果有人在网址末尾添加了十六进制值,我想这样做,我可以向他们展示某个页面。
例如,假设我有colors.com,我希望如果有人想去colors.com/FF0000,它会在页面上显示该十六进制。是否可以从URL中获取并显示它,尽管我希望它只是十六进制值。
删除某些字母和特殊字符,以便有人不能只使用文字。
希望这是有道理的。
答案 0 :(得分:3)
您需要使用Web服务器的URL重写来匹配看起来像十六进制颜色(6个字母A-F和数字0-9)的模式并相应地进行路由。
Apache mod_rewrite示例以静默方式将example.com/AA00FF
重写为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']}'>";
答案 1 :(得分:1)
假设服务器将URL映射到您的脚本,您可以从$_SERVER['REQUEST_URI']
获取它。
您可以使用简单的正则表达式确保它是十六进制rgb颜色。
答案 2 :(得分:0)
有可能抓住它。这需要:
.htaccess文件,就像这样,在colors.com的根文件夹中:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
包含以下内容的index.php文件:
// Get color from PATH_INFO in url.
$color = substr($_SERVER['PATH_INFO'], 1);
// If color is not a valid color hex code.
if(!preg_match('/^[a-fA-F0-9]{6}$/i', $color)){
die("NOT VALID");
}
echo $color; // Prints 00FFFF if url is color.com/00FFFF