2010-07-20 64 views
1

首先,我不想要什么在URL查询。我想要看看$_GET阵列中的PHP。有什么办法让所有的GET变量与JavaScript?

这是因为该网址查询将不会显示所有PARAMS如果mod_rewrite已经被用来制造漂亮的URL

那么,有没有办法让查询字符串将匹配什么是PHP $_GET阵列?

-

我想出了使用PHP和JavaScript像这样自己的方式:

function query_string() 
{ 
    <?php 
     function assoc_array_to_string ($arr) 
     { 
      $a = array(); 
      foreach($arr as $key => $value) 
      { 
       $str = $key.'='.$value; 
       $a[] = $str; 
      } 
      return implode("&",$a); 
     } 
    ?> 
    return '<?=urlencode(assoc_array_to_string($_GET))?>'; 
} 

...但我需要的JavaScript只是如果可能的话,因为我不能这样做将PHP代码放在.js文件中。

+0

可能重复(http://stackoverflow.com/问题/ 2090551/parse-query-string-in-javascript) – kennytm 2010-07-20 17:42:24

+0

(Javascript无法访问服务器,它不知道mod_rewrite正在做什么,以上是无需服务器交互即可完成的最佳解决方案。 – kennytm 2010-07-20 17:43:36

+0

@KennyTM这不是重复的,因为上面的问题是问如何得到什么是在url查询字符串,我不是。我不知道他们是否存储在任何可以从JS/DOM中检索的地方。我想没有,但像Jhongs这样的解决方案对我的问题比上面的链接更好。 – 2010-07-20 17:49:51

回答

3

不会JavaScript“只看到”查询字符串吗?客户端脚本如何知道任何重写规则?

我能想到的唯一方法就是使用PHP - 将它回显到主页中的内联脚本中的变量中,而不是JS文件中。

1

window.location.search中找到查询字符串,但这是原始查询字符串。所以,如果你运行的是这样的:

(function() { 
    QueryStr = {} 
    QueryStr.raw = window.location.search.substr(1); 
    var pairStrs = QueryStr.raw.split('&'); 
    QueryStr.val = {} 
    for(var i=0,z=pairStrs.length; i < z; i++) { 
     var pair = pairStrs[i].split('='); 
     QueryStr.val[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); 
    } 
})(); 

你得的东西很像$_GETQueryStr.val

当然,你提到你用mod_rewrite混合了一下,这很酷,但由于我们不知道你的重写方案,所以我们不能帮助特别是

但是... 知道你的重写方案,你也许可以修改上面给出的代码来操作window.location的其他部分。我敢打赌,你想要在/字符上分割window.location.pathname而不是&

+0

谢谢,我可能(因为我知道mod_write方案)使用正则表达式或其他东西从URL中提取它。但是,由于我正在使用不同的方案在多个页面上重复使用该平台,因此我希望采用较少的临时方式。我想我可能会像Jhong所建议的那样做一些事情,并且只需要一个函数中的参数,该参数可以使用php从.js文件之外传入。但是,谢谢你的建议,这是一个我甚至没有想到的想法! – 2010-07-20 17:56:27

3

在你的页面<头>:

<script type="text/javascript"> 
var phpQueryParams = <?php print json_encode($_GET); ?> 
</script> 

PHP 5.2至少假设,否则使用的[解析JavaScript中的查询字符串]一个external package

+0

尽管返回的JSON应该可以安全地用于可能的恶意字符串,但您也许应该将脚本内容封装在<![CDATA [...]]>中,并结合str_replace将]]>合并到“+” “]>以便包含]]>的字符串不会结束CDATA块。 如果您决定不使用JSON编码器,则应该更加警惕恶意查询字符串可能将脚本注入页面的方式。 – Nick 2010-07-21 12:04:23

相关问题