我有一个带有一些按钮的html页面,我的一个按钮如下:
<input class="contentLink" type="button" value="Questionnaire" onclick="validate(<?php urlencode('/my-site/Tools/Learning_Strategies/Questionnaire.php'); ?>)"/>
基本上单击此按钮时,它会将urlencoded-string文字'/my-site/Tools/Learning_Strategies/Questionnaire.php'传递给javascript方法验证:
function validate(url){
alert(url);
location.href="/my-site/Session/redirectMe.php?loc="+url;
}
我想要做的是从redirectMe.php访问的html页面中获取'/my-site/Session/Questionnaire.php'。这是在
中设置的location.href="/my-site/Session/redirectMe.php?loc="+url;
导致我的redirectMe.php文件:
<?php
require "SessionAuthenticator.php";
Session_start();
if(validateSession()===true){//validateSession() is defined inside SessionAuthenticator.php
echo $_GET["loc"];
//header("Location: ".$_GET["loc"]);
}else{
header("Location: /my-site/LoginPage/index.php");
}
?>
问题出在alert和echo期间,编码的字符串文字显示为“undefined”,表示以下行:
header("Location: ".$_GET["loc"]);
看起来真的像这样:
header("Location: undefined");
因此在当前目录中查找“undefined”并破坏网站。
如果没有以下编码,这一切都很有效:
<input class="contentLink" type="button" value="Questionnaire" onclick="validate('/my-site/Tools/Learning_Strategies/Questionnaire.php')"/>
但是......没有编码是坏的吗?
如果您想知道为什么没有看到正在使用的解码方法......
网络服务器将安排$ _GET在到达您之前已经被urldecoded一次! - 马特约翰逊¶@ http://php.net/manual/en/function.urldecode.php#48481
要求和包含将无效,因为redirectMe.php将在用户查看页面之前执行。这应该仅在用户单击按钮时发生。这就是为什么我使用javascript函数启动redirectMe.php。
我尝试了ajax,但是这没用。在与我认识的有经验的程序员交谈之后,我被告知ajax在这里无法帮助我。这是因为Ajax会被重定向到'/my-site/Tools/Learning_Strategies/Questionnaire.php',而不是客户端(User)。
清楚地说明我的问题:
为什么在echo-ed / alert-ed时,urlencoded会出现'undefined'?我该如何解决这个问题?
至于我正在使用的程序/网络服务器/等......
Sublime 3(文本编辑器)
Wamp(64BIT)(一体化套餐)@ http://www.wampserver.com/en/
Apache 2.4.17
PHP 7
MySQL 5.7.9
我愿意接受其他方法来获得我想要做的事情。
但是,我不愿意改变网络服务器/程序等(除了崇高3,因为它只是一个文本编辑器......但为什么需要这样做?)。
此外,无论如何完成此操作都需要支持如下所述的浏览器/平台。
该网站必须支持:
(浏览器)
IE 8及更高版本,以及Microsoft Edge,Firefox,Chrome和Safari的最新版本。
跨平台:
Windows 7及更高版本,以及最新版本的Mac OS,IOS和Android
答案 0 :(得分:2)
为什么urlencoded会出现&#39; undefined&#39; echo-ed / alert-ed?
因为PHP没有输出任何内容。
echo
给你:
json_encode
...一旦你通过PHP解析器运行它。
你需要: