【问题标题】:My jQuery and PHP give different results on the same thing?我的 jQuery 和 PHP 在同一件事上给出不同的结果?
【发布时间】:2010-06-03 20:07:18
【问题描述】:

烦人的大脑麻木问题。

我有两个函数来检查字符串的长度(主要是 js 一个也被截断)继承人 Javascript 中的一个:

$('textarea#itemdescription').keyup(function() {
    var charLength = $(this).val().length;
    // Displays count
    $('span#charCount').css({'color':'#666'});
    $('span#charCount').html(255 - charLength);

    if($(this).val().length >= 240){
        $('span#charCount').css({'color':'#FF0000'});
    }
    // Alerts when 250 characters is reached
    if($(this).val().length >= 255){
        $('span#charCount').css({'color':'#FF0000'});
        $('span#charCount').html('<strong>0</strong>');

        var text = $('textarea#itemdescription').val().substring(0,255)
        $('textarea#itemdescription').val(text);
    }
});

这是我要仔细检查的 PHP:

if(strlen($_POST["description"])>255){
    echo "Description must be less than ".strlen($_POST["description"])." characters";
    exit();
}   

我正在使用 jQuery Ajax 发布来自 textarea 的值。但是我的 php 验证说 strlen() 比我的 js 本质上说的要长。因此,例如,如果我输入一个实心字符串,它显示 0 或 3 个字符,直到 255。然后我点击保存,php 给我的长度为 261。

有什么想法吗?

是不是跟特殊字符、js读取不同或者漏掉的位大小有关?还是与其他事情有关?也许今天病了!...:P

更新: 我加了var_dump($_POST['description']) 查看通过了什么,它正在返回转义斜线,例如这是怎么回事?我试过添加 stripslashes();无济于事......他们来自哪里?

更新 2 - 问题已解决

基本上我想我刚刚意识到我的服务器开启了魔术引号...grr 所以我现在在处理之前已经剥离了斜线。有点烦人,但必须这样做!

感谢您的帮助!

谢谢, 斯蒂芬

【问题讨论】:

  • 使用 .html() 而不是 .val() 会发生什么?

标签: php javascript jquery strlen


【解决方案1】:

最简单的调试方法就是从您的 PHP 脚本中使用: var_dump($_POST['description']

我建议您也可以在浏览器中使用查看源代码来查看任何转义码、特殊字符码等...

【讨论】:

  • 我看到添加的斜杠在这样做之后我怀疑来自数据库!谢谢!
  • magic_quotes 设置可能已打开。我通常只是在我的 php.ini 中关闭它并自己进行数据清理。要使stripslashes() 工作,您需要将结果存储在一个变量中,即:$description = stripslashes($_POST['description']); 之后,您可以用 $_POST['description'] 代替 $description。
  • 谢谢 原来它必须打开 - 刚刚解决了!啊,好吧,将不得不联系我的服务器家伙!我自己做所有自己的脱衣舞和加睫毛。所以现在意识到这一点会有所帮助。看来if(strlen(stripslashes($_POST["description"]))&gt;255){ 很适合检查!再次感谢。 :)
【解决方案2】:

如果您发布更多前端代码会有所帮助,尤其是在您进行实际 POST 的地方。也就是说,您确定每次都调用 keyup 吗?如果用户只是将文本粘贴到框中,您是否验证它仍然被调用?

还要记住,JavaScript 不足以保证字符串小于给定长度。用户可以禁用 JavaScript,而精明的“用户”可以发送自己的 POST 请求,其中包含超过 255 个字符。

【讨论】:

  • 是的,我已经做了足够的测试,知道它工作得很好,并且显然被右键单击粘贴绕过了 - 因此是 php 验证,但由于验证的不同,它会使用户感到困惑。不理想。
【解决方案3】:

我怀疑很少有字符是换行符(你说你使用 textarea)在你使用 javascript 验证时会被忽略。

【讨论】:

    【解决方案4】:

    我发现有两件事可能会导致您的问题。

    • 首先 substring(0,255) 返回 256 个字符
    • 其次,magic_quotes 可能在 php.ini 中打开,PHP 会尝试为您提供转义字符串,但并不总是正确

    编辑

    没有重新阅读子字符串定义,忽略第一个,但magic_quotes 可能正在检查那个

    【讨论】:

      【解决方案5】:

      如果您使用 UTF-8 编码,PHP strlen() 会计算字节数,而不是字符数。如果你有任何非 ASCII 的东西,就会发生这种情况。使用 mb_strlen()。魔术引号也可以添加几个字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 2015-11-10
        • 2012-12-25
        • 2021-06-06
        • 2018-07-19
        相关资源
        最近更新 更多