2

烦人的大脑麻木问题。

我有两个函数来检查字符串的长度(主要是 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 所以我现在在处理之前已经剥离了斜杠。有点烦人,但它必须这样做!

谢谢你的帮助!

谢谢,斯特凡

4

5 回答 5

4

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

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

于 2010-06-03T20:14:19.553 回答
1

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

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

于 2010-06-03T20:12:48.313 回答
1

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

于 2010-06-03T20:12:50.443 回答
1

我看到两件事可能会导致您的问题。

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

编辑

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

于 2010-06-03T20:38:56.903 回答
1

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

于 2010-06-03T20:48:23.587 回答