在mysql搜索中导致$ _GET“+”符号

时间:2013-06-14 10:11:00

标签: php javascript get

我有一个输入$ _GET的表单并将其弹出到MySQL查询中。它的工作方式大致如我所料:

当搜索包含空格的项目时,$ _GET会用“+”替换这些空格。

这是难以解释的地方......

初始查询工作正常,具有空格的项目也从数据库返回没有问题。

然而:

然后我有一个弹出计算窗口,它引用了一个不同的php函数,它将页面$ _GET连接到新url的$ _GET上。

正是在这个阶段,“+”触发了网址的结尾,并且没有显示任何内容。

例如:

这是$ _GET ?dialstring=&groupSelect=uk+vodafone 但是弹出窗口获得$ _GET为?dialstring=&groupSelect=uk

我认为可能是JS弹出代码打破$ _GET,如下所示:

function modalcalc(){ 
      $('<div>').dialog({
      title:    'Calculator',
      height: '350', 
      width:    '400',
      open: function ()
        {
        $(this).load('<?=base_url();?>ratesheet/calculator/<?=$this->uri->segment(3);?>/?dialstring=<?=$_GET['dialstring']?>&groupSelect=<?=$_GET['groupSelect']?>');
        },         
modal: true 
});
return false;
}`

为了剩余的大量功能,我需要/希望保持$ _GET,因为$ _POST似乎无法做我需要的。

2 个答案:

答案 0 :(得分:0)

生成查询字符串时,请使用rawurlencode代替urlencode

它将使用%20而不是+(RFC 3986),这是PHP所期望的。

或者,我正在运行PHP&gt; = 5.4,您可以将PHP_QUERY_RFC3986指定为http-build-query中的enc_type参数。

答案 1 :(得分:0)

<?=$_GET['dialstring']?>替换为<?=rawurlencode($_GET['dialstring']);?>,将<?=$_GET['groupSelect']?>替换为<?=rawurlencode($_GET['groupSelect']);?>。这应该可以解决问题。