【发布时间】:2013-10-29 21:23:18
【问题描述】:
我有一个小静态函数,这样我就可以在我的本地网站上轻松构建 html 有效 url,它在下面;
public static function url($path = false) {
// Build return url with special html characters escaped
return 'http://127.0.0.1/' . htmlspecialchars($path);
}
我有两个网址,一个在锚点内,另一个在表单动作内,它们在下面;
Root::url('test?category=' . $category . '&index=' . $index) // Href
Root::url('test?category=' . $_GET['category'] . '&index=' . $_GET['index']) // Form
GET === $,您可以在我的静态函数内部看到我使用htmlspecialchars 来转义我的网址中的特殊 html 字符。
锚点返回一个有效链接并按预期工作。然而,表单一返回以下内容,当我点击表单提交时,我在浏览器中的网址如下。
http://127.0.0.1/test?category=innate&index=0
这是为什么?我的网站中断是因为它依赖于有效的GET 参数。
感谢您的宝贵时间,希望这是有道理的。
编辑
我将函数调用的返回值直接插入到我的表单操作中,
<form
action="<?= Root::url('test?category=' . $_GET['category'] . '&index=' . $_GET['index']); ?>"
method="post">
编辑
表单html如下;
<form action="http://example.com/test?category=innate&index=0" method="post">
锚点html如下
<a href="http://example.com/test?category=innate&index=0">
这可能与服务器发送 POST 请求有关,即使我有 GET 参数?
编辑#3
好的,所以它与我的函数或我传入的内容有关,我在表单提交中硬输入了 url,它工作,没有问题,这意味着它只能是我的函数返回的内容。
我自己看不到我可能是什么!
回答
提交表单后,我使用header 重定向到同一页面以阻止重新提交表单。标题的字符串是由Root::url() 生成的。
这花了我两个小时才弄明白,但是男孩感觉很好!
【问题讨论】:
-
看起来
Root::url的输出在您调用函数的点和将结果插入 HTML 的点之间再次被转义。 -
我将它直接插入到 html 中,我会编辑我的问题给你看,
-
用
urlencode传输它并在输出中用htmlspecialchars(urldecode($whatever))解码它怎么样? -
我现在试试,谢谢,为什么这很重要,在我的源代码中它显示的和锚一样,即只有一个
&amp;,但是浏览器不会改变它点击提交,很奇怪!
标签: php forms url html-entities