Href截断变量中的PHP Echo


PHP Echo in Href Cutting off Variable

在我的表单中操作:

    <form class="login" style=" ;"method="post" action=<?php echo "add_answer.php?id="; echo $id; echo "&z=$zipcode&d=$date&category=$category"; ?>">

$category是一个2个单词的变量"草坪修剪"。然而,它将我引导到链接:

add_answer.php?id=1&z=55901&d=04/25/2014&category=草坪

如果您注意到结尾是"Lawn"而不是"Lawn Mowing",我确保$category在页面的标题中显示为"Lawn Moving"。如何修复此问题,使整个单词通过URL?

您需要urlencode()变量。

<form class="login" style=" ;"method="post" action=<?php echo "add_answer.php?id=".urlencode($id)."&z=".urlencode($zipcode)."&d=".urlencode($date)."&category=".urlencode($category); ?>">

为什么我必须使用urlencode()

URI总是以"转义"形式存在,因为转义或取消捕获已完成的URI可能会更改其语义。通常情况下创建URI时可以安全地进行转义编码从其组成部分;每个组件都可以有自己的一组保留的字符,因此只有负责生成或解释该组件可以确定转义字符将更改其语义。同样,URI必须在可以安全地对这些分量进行解码。

在某些情况下,可以由未保留的角色可能出现逃脱;例如,一些毫无保留的某些系统会自动转义"标记"字符。如果给定的URI方案定义了一个规范化算法,然后是无保留的可以根据该算法来取消对字符的标注。例如在http URL路径中有时使用"%7e"而不是"~",但是对于http URL,两个是等效的。

因为百分比"%"字符始终具有保留用途作为转义指示符,它必须转义为"%25"才能用作URI内的数据。实施者应小心不要多次转义或取消捕获同一字符串,因为取消捕获已经取消标注的字符串可能会导致误解百分比数据字符为另一个转义字符,反之亦然正在转义已转义的字符串。

Source

这样尝试:

<form class="login" style=" " method="post" action="<?php echo "add_answer.php?id=$id&z=$zipcode&d=$date&category=urlencode($category)"; ?>">

使用此-

form class="login" style=" ;"method="post" action=<?php echo "index2.php?id=".urlencode($id)."&z=".urlencode($zipcode)."&d=".urlencode($date)."&category=".urlencode($category); ?>>