PHP urlencoded变量变得未定义?

时间:2016-07-08 15:14:32

标签: javascript php urlencode

我有一个带有一些按钮的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

1 个答案:

答案 0 :(得分:2)

  

为什么urlencoded会出现&#39; undefined&#39; echo-ed / alert-ed?

因为PHP没有输出任何内容。

echo

给你:

json_encode

...一旦你通过PHP解析器运行它。

你需要:

  • {{1}}结果显示
  • 将其包装在引号中(使用{{1}},因此还需要进行任何转义),以便将其视为字符串而不是变量名。