对php`str_len`和jQuery`.val().length()获得相同的结果`

对php`str_len`和jQuery`.val().length()获得相同的结果`,php,javascript,jquery,strlen,Php,Javascript,Jquery,Strlen,我使用jQuery动态计算textarea的值: function count_chars () { count_chars=$('#text_textarea').val().length; } …然后在提交时序列化表单,通过ajax将textarea的文本发送到php文件,然后在服务器端验证文本。但是,我遇到了换行符和空格的问题 当然,如果我只是从textarea获取文本“原样”,php会将每一行计算为两个或四个字符(\n,…)。所以我试着用这样的东西来代替它们: strlen(s

我使用jQuery动态计算textarea的值:

function count_chars () {
    count_chars=$('#text_textarea').val().length;
}
…然后在提交时序列化表单,通过ajax将textarea的文本发送到php文件,然后在服务器端验证文本。但是,我遇到了换行符和空格的问题

当然,如果我只是从textarea获取文本“原样”,php会将每一行计算为两个或四个字符(
\n
,…)。所以我试着用这样的东西来代替它们:

strlen(str_replace(array("\r", "\n"), ' ', $text)))
或者这个:

strlen(preg_replace('/\s+/', ' ', trim($text)))
但是,如果我得到例如10个段落,jQuery返回2500个字符,php将返回2510或2490,这取决于我是用空格替换新行还是完全删除新行。所以差别是20,但是只有10条新的线路

我错过了什么?如何让php返回与jQuery相同的结果?在php或jQuery中,问题出在哪里?

这应该可以:

strlen(str_replace("\r", '', $text)))
说明:

strlen(str\u替换(数组(“\r”,“\n”),“$text))

在这里,您将用空格替换\r和\n,因此字符数实际上不会改变

strlen(preg_replace('/\s+/','',trim($text))


在这里,您正在将连续的空白减少为单个
'

您使用什么字符编码?您的客户机运行在哪个操作系统上?(Windows与unix使用不同的行尾)。@Maerlyn:嗯,它将运行在一个Web服务器上,我现在不知道它是Windows还是linux,它只是一个共享主机。。。字符集是utf8,但它在这里重要吗?您可能需要在两个位置规范换行符。我认为当用户点击“Return”时,您无法控制默认情况下浏览器插入的内容。@Chris-
strlen()
计算字节数,而不是字符数。如果您使用UTF-8,它不适合您的任务。@Chris utf8是一个多字节字符集,您需要使用
mb\u strlen
来计数字符而不是字节。您可以向他解释为什么
/\s+/
在这里不起作用。也就是说,
/\s+/
他正在折叠空格。我会用
preg_replace('/(?:\r|\n)/','',trim($text))
来确定。谢谢你,狗伯特!不幸的是,它仍然给了我错误的结果。我输入了12345,然后输入了5个空格和5行新行-jQuery说15,php说20…@Chris,这似乎对我很有用,无论是
\r\n
还是
\n
行尾。你能发布一小段php/js代码来演示这个问题吗@多伯特:你写了
str\u replace(“\r”,…
,你的意思是
str\u replace(“\r\n”,…
”?,因为这对我来说很有用,非常感谢!)