我正在尝试显示来自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');
谢谢!
答案 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
的所有发生