$ _GET颜色变量

时间:2014-01-30 17:38:43

标签: php colors get

我正在尝试显示来自URL的$ _GET变量,这些变量是颜色并且在其中有一个数字符号(哈希)( aka,比如说“#ff0000”表示红色),但我可以'似乎让它发挥作用。 我无法将颜色输出更改为除了颜色十六进制代码之外的任何内容(不受我的控制),因此这不是解决方案。

目前存在以下问题:

// URL: http://__________.com/styles.php?color=#f6f6f6&color2=#fff
var_dump($_GET['color']);
// Returns string(0) ""

引用它的页面上的用法是:

<link href='//__________.com/styles.php?color={color}&color2={color2}' rel='stylesheet' type='text/css'>

因此,当页面加载时,它会输出第一个代码段(http://__________.com/styles.php?color=#f6f6f6&color2=#fff)中的URL。

此外,如果变量存在与否,filter_input的最佳方法是什么。例如,我正在使用它,但我不认为这是正确的:

$color = ($_GET['color'] != '' ? filter_input(INPUT_GET, 'color', FILTER_SANITIZE_ENCODED) : 'green');

谢谢!

2 个答案:

答案 0 :(得分:2)

在地址栏处,#符号具有不同的含义。

你应该使用urlencode()

urlencode("http://__________.com/styles.php?color=#f6f6f6&color2=#fff")

从另一边urldecode

话虽如此,这是一个例子: 如果我想传递hash-tag #,我需要将其替换为另一个匹配的字符串,即:%23,它是hash-tag的匹配字符串。

所以我的字符串将是这样的:

http://__________.com/styles.php?color=%23f6f6f6&color2=%23fff

在PHP端,我将解码给定值。

$myColor = urldecode($_GET['color]);

现在它将保存我想要的颜色#f6f6f6

答案 1 :(得分:0)

那是因为#是保留的URL字符。见RFC 3986 生成URL时,对其进行编码,使#是URL安全的。

要编码,只需替换#with%23

的所有发生