来自外部源的变量名称中的点和空格将转换为下划线

时间:2010-06-17 19:30:53

标签: php jquery ajax codeigniter

尝试了一些AJAX,我发现我的大部分数据都充斥着下划线! 文档证实这是按预期工作的。有什么方法可以将我的表单信息传递给PHP吗?我正在使用CodeIgniter,所以我的传递看起来像/ controller / function / variable, 接收控制器:

controller{
 function($v=0){#what once was hello world is now hello_world...}
}

我不能很好地撤消,数据可能包含下划线。

谢谢, 布兰登

编辑:

我认为它正在转换价值。以下是代码的要点:

<form>
<text input name="tbox"/>
<submit/>
</form>

 ajax_handler(
    v = form.name() + form.val()
    do_ajax('/controller/function/v')
 )

controller(){
   function($v=0){#spaces and periods in v are converted to underscore}
} 
再次感谢, 布兰登

这是实际代码:

<input type="text" id="tusername" name="tusername" class="checkable tbox"/>
<button id="unsubmit" name="wizard" class="formable">next</button>


        $('.formable').live('click',function(event){
            event.preventDefault();
            var n = $(this).attr('id');
            var a = $(this).attr('name');
            var v = dosend(); 
            $.ajax({
                    url: '/form/'+n+'/'+v,
                    type: 'post',
                    success: function(result){
                         alert(result);
                    }  
            });
            function dosend(){
                    var inputs = $(":input");
                    var s = "";
                    inputs.each(function(){
                            s += $(this).attr('name')+":";
                            s += $(this).val()+";";
                    });
                    return s;
            }
    });

   class Form extends Controller{
       function Form(){
           parent::Controller();
           session_start();
       }
       function unsubmit($v=6){
           print $v;
       }
   }

字符串中传递给控制器​​函数的任何内容都是空格或句点转换为下划线。我在这个框中键入hello world,然后打印出hello_world。

            $w = explode(';',$v);
            foreach($w as $i){
                    $x = explode(':',$i);
                    if(isset($x[1])){
                      $_AJAX[$x[0]] = $x[1];
                    }
            }

4 个答案:

答案 0 :(得分:1)

http://sholsinger.com/archive/2009/04/passing-email-addresses-in-urls-with-codeigniter/找到了这个,现在已经解决了。

通过URI段传递的值的周期可能会在特定条件下不正确地转换为下划线。为此,您必须使用mod_rewrite,并且您的RewriteRule指令也会通过查询字符串传递重写的段。例如:

RewriteRule ^(.*)$ /index.php?/$1 [L]

要解决此问题,您必须编辑配置值uri_protocol。默认值为“AUTO”。必须将其设置为“QUERY_STRING”。例如:

$config['uri_protocol'] = 'QUERY_STRING';

答案 1 :(得分:0)

Php不会转换数据而是转换变量名称 您确定无法更改字段名称吗?

答案 2 :(得分:0)

据我所知,没有。

正如您所说,PHP正在重命名变量,如Variables From External Sources PHP手册页中所述:

  

注意:变量中的点和空格   名称将转换为下划线。   例如&lt; input name =“a.b”/&gt;   变成$ _REQUEST [“a_b”]。

但是,我不确定为什么这会有所作为。存储在该变量中的数据保持不变。

答案 3 :(得分:0)

如果您需要保留它们,请考虑发送其他内容,然后application/x-www-form-urlencodedmultipart/form-data。例如,这个好听的问题尝试使用JSON,您可以随意解析:handle json request in PHP

JSON更易于解析。但是,您可以使用application/x-www-form-urlencoded表单(无法处理文件上传),file_get_contents('php://input'),并根据自己的喜好解析字符串。

有一个肮脏,肮脏的黑客,我很高兴在上周被告知这也适用于multipart/form-dataGet raw post data


错过了“我只是使用帖子,用':'分隔键和值,并与';'配对“显然:

        $.ajax({
                url: '/form/'+n+'/'+v,
                type: 'post',
                contentType: 'text/plain', //<-- add this

可能会解析:

    <?php
    $post = file_get_contents('php://input');
    $pairs = explode(':',$post);
    $values = array();
    foreach($pairs as $pair){
         $vars = explode(':',$pair,2);
         $values[$vars[0]] = $vars[1];
    }
    ?>