2012-02-20 106 views
-3

我可以看到这个问题被问了很多次,我做了大量的研究,可以使用哪些方法将几个Javascript变量传递给PHP脚本。在形式PHP脚本的Javascript变量

  1. 后的数据作为隐藏值
  2. 后到URL,即 '/txt.php?h=' + VAR
  3. 使用Cookie

我试着写一段代码,可以让你下载你在Wrrrite.com写的东西 - 我是这个网站的开发者。 (我也做了一个客户端的方法,把变量放入URI并设置一个头部来下载东西)

这一切都不起作用。要么有导致错误的字符,要么有html元素。

有什么我可以编码,以保证工作/变量的1:1转移?

数据类型:HTML +各种不同的字符“!!!”等 输出:.txt文件,perferably 1:中正在写入的形式

+3

你试图传输什么样的数据?如果它是HTML,将表单中的数据作为隐藏值发布应该可行。 (所以应该是一个Ajax POST请求。) – 2012-02-20 10:56:07

+0

PHP与此有什么关系? Wrrrite似乎完全使用JavaScript编写,并使用本地存储(由于数据已经是本地数据而“下载”不可能)存储数据。 – Quentin 2012-02-20 10:57:43

+0

你有什么代码?什么“不起作用”?你会得到什么错误? – Quentin 2012-02-20 11:01:04

回答

1

你也许应该使用您的数据的Base64编码是什么,在发送前1转换看一看MDN for the JavaScript部分和here对于PHP解码,这可以防止特殊字符破坏您的代码。

+1

Base64将数据量膨胀了33%,并且在使用POST时不应该这样。 – 2012-02-20 11:06:43

+0

他指出他的问题是数据中的特殊字符和html元素。两者都可以被Base64绕过。 – Sirko 2012-02-20 11:10:03

+0

当内容只是文字时,它不应该是必要的,这似乎是从问题中的网站一目了然。 encodeUriComponent是一个更明智的方法。 – Quentin 2012-02-20 11:10:23

0

希望它可以帮助

//PHP 

if(isset($_REQUST['submit'])) 
{ 
    $download=$_REQUEST['download']; 
// from database get value of all the downloadable items 
// and check if the input is in that array then to the suitable thing. 
} 
//HTML 
<form method="post" action=''> 
Type :<input type="text" id="txtField" name="txtField" /> 
<input type="hidden" name='download' /> 
<input type="submit" name="submit" onclick="return onSubmit() " /> 
</form> 

//Javascript 

<script type="text/javascript"> 
function onSubmit() 
{ 
if(document.getElementById("txtField").value != '') 
{ 
    document.getElementById("download").value=document.getElementById("txtField").value; 
return true; 
} 
else 
{ 
alert("Please enter item to download"); 
return false; 
} 
} 
0

这里的Cookie的方法,该方法不起作用http://pastebin.com/SKNtxLi5

这只是将数值合并在一起,而不考虑cookie中使用的数据格式。

如果你想解决这个问题,怪异模式有decent guide to cookies with JS

但是......饼干的重点在于数据依然存在。对于一次拍摄的信息来说,这不是一个明智的转变。