如何发送一个十六进制颜色?

时间:2013-09-20 17:34:27

标签: php

例如:index.php?color=#c2c2c2

echo $_GET['color'];

这可能不起作用,怎么样?

3 个答案:

答案 0 :(得分:6)

网址对您发送的内容进行编码。当网址编码时,#%23

在接收方,你只需要这样做:

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

使用javascript进行网址编码:

var color = encodeURIComponent("#c2c2c2");

答案 1 :(得分:0)

您只需要使用#转义网址中的%23即可。否则,服务器将其解释为 anchor (页面中的位置,服务器不需要担心)而不是查询字符串的一部分。所以就这样发送:

index.php?color=%23c2c2c2

或者你总是可以在没有#的情况下发送它,如果它应该在那里是明确的。

答案 2 :(得分:0)

应该可以正常工作。这是经过测试的代码:

<?php

echo "<div style='background-color: {$_GET['color']};padding: 1em; margin-bottom: 1em; '>";

echo $_GET['color'];   

echo "</div>";

?>

<form action="" method="get">

  <label>Color:</label>
    <input type="text" id="color" name="color" value="<?php echo $_GET['color']; ?>" />

    <input type="submit" value="Show Color" /> 
</form>

请注意,无需解码或编码任何内容。浏览器处理编码,PHP知道解码。

如果关注的是如何手动创建URL,则需要采用其他方法。你可以考虑允许颜色为没有哈希标记的十六进制值,并测试它是否是一个有效的颜色值:

 $valid_color = (ctype_xdigit($_GET['color'] && strlen($_GET['color']) < 7);
 if($valid_color) $color = "#" . $_GET['color'];