【问题标题】:Plus sign disappearing on server side?加号在服务器端消失?
【发布时间】:2012-02-27 12:42:34
【问题描述】:

我现在无法查看 mysql 表...但我认为 '+' 不会进入表中。

我检查了magic_guotes,它已打开。然而,magic_quotes 不应该对“+”号做任何事情,因为它只涉及数据库使用的字符的转义。

另外,我在客户端和服务器(javascript 和 php)上检查了我的regular expressions,没有任何东西可以删除“+”号。

我也使用htmlentites(),但我不相信 + 是一个 html 实体,即使它是这样,也只能使它成为一个实体而不是一个字符。

这会留下json_encode,但我能够在编码之前将字符回显给客户端,并且仍然可以看到没有“+”号。

我已经检查了所有 5 个地方,但无法确定我的 + 号要去哪里......似乎 mysql 数据库正在返回 + 号应该在的地方。

Ajax 序列化

function ajax_serialize( form_name )
{
    var return_string='',  
        form_elements=document.forms[form_name].elements,
        iterator;  
    for(iterator = 0; iterator < form_elements.length; iterator++)
    {
        if( form_elements[iterator].name )
        {
            if( form_elements[iterator].type === 'checkbox' && form_elements[iterator].checked === false )
            {
                return_string += form_elements[iterator].name + "=0&";
            }
            else
            {
                return_string += form_elements[iterator].name + "=" + form_elements[iterator].value+"&";
            }
        }
    }
    return_string = return_string.slice( 0, -1 );
    return return_string;
}

Ajax 推文

function interface_tweet()
{
    var form_name = 'tweet',
        response_div = form_name + '_response',
        tw_text = new Text(form_name),
        tw_message = new Message(response_div);

    if( Constant.VALIDATE_ON === 1 )
    {
        if( !tw_text.checkEmpty() ) 
        {
            tw_message.display('empty');
            return;
        }

        if( !tw_text.checkPattern('tweet') ) 
        {
            tw_message.display('tweet');
            return;
        }
    }

    Ajax.repeatUseAjaxObject( Constant.GATEWAY, ajax_serialize( 'tweet') + '&ajax_type=ControlTweet_add' , ajax_tweet ,'tweet_fill' );
    document.getElementById( 'tweet_input' ).value='';
    document.getElementById( 'tweet_response' ).innerHTML='';
}

【问题讨论】:

  • 我现在无法查看 mysql 表...但我不认为 '+' 正在进入表中。 你应该回来时可以...
  • 您是从表单中发送这个“+”还是从哪里获得的?如果您尝试使用 ajax 或任何类型的 javascript 从表单中使用“+”提交数据,那么您应该对数据使用 encodeURIComponent(如果您以正确的方式使用它,jQuery 会自动执行此操作)
  • I ajax posted it from a form 显示代码。看起来您没有使用 URI 编码,并且 RFC '+' 表示空格。 '+' 应该写成 %2B
  • @stack.user.0 我告诉过你 - 显示你的 js 代码!这里没有人有心灵感应能力:) 至少在您准备要提交的数据的部分。您应该对该数据进行编码。

标签: php regex json html-entities magic-quotes


【解决方案1】:

这是你应该拥有的

return_string += encodeURIComponent(form_elements[iterator].name) + "=0&";

return_string += encodeURIComponent(form_elements[iterator].name) + "=" 
               + encodeURIComponent(form_elements[iterator].value)+"&";

如果您的form_elements[iterator].name 没有任何应编码的符号,那么您可以删除encodeURIComponent

【讨论】:

  • 我认为现在我必须解码来自数据库的数据?
  • @stack.user.0 你不必解码它——它是由服务器在从表单接收到数据的那一刻自动完成的。这是通过 GET 或 POST 请求发送数据时的native 表示。
  • ?好吧...我对最简单的数据库更新进行了多少文本处理感到困惑...希望我现在完成了...再次感谢。
猜你喜欢
  • 1970-01-01
  • 2013-01-28
  • 2015-03-20
  • 2011-04-13
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多