恼人的大脑麻木问题。
我有两个函数来检查字符串的长度(主要是,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 所以我现在处理之前已经删除了斜线。有点烦人,但它必须要做!!
感谢您的帮助!
谢谢, 斯特凡
答案 0 :(得分:4)
调试此问题的最简单方法是使用PHP脚本,方法是:
var_dump($_POST['description']
我建议您在浏览器中使用查看源查看任何转义码,特殊字符代码等...
答案 1 :(得分:1)
如果您发布了更多的前端代码,尤其是在您进行实际POST的情况下,这将有所帮助。那就是说,你确定每次调用keyup吗?如果用户只是将文本粘贴到框中,您确认它仍然被调用吗?
另请注意,JavaScript不足以保证字符串小于给定长度。用户可以禁用JavaScript,精明的“用户”可以发送超过255个字符的POST请求。
答案 2 :(得分:1)
我怀疑使用javascript验证时忽略的几个字符是换行符(你说你使用的是textarea)。
答案 3 :(得分:1)
我看到可能导致问题的两件事。
substring(0,255)
返回256个字符magic_quotes
可能在php.ini中打开,PHP尝试为您提供转义字符串,但不会一直正确修改的
doh没有重新读取子字符串定义,忽略第一个,但magic_quotes
可能会检查一个
答案 4 :(得分:1)
如果使用UTF-8编码,PHP strlen()会计算字节数,而不是字符数。如果你有任何非ASCII,这将发生。使用mb_strlen()。魔术引号也可以添加几个字符。