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

Chr*_*ris 8 javascript php jquery strlen

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

function count_chars () {
    count_chars=$('#text_textarea').val().length;
}
Run Code Online (Sandbox Code Playgroud)

...然后提交序列化表单,通过ajax将textarea的文本发送到php文件,然后验证服务器端的文本.但是,我遇到了换行符和空格问题.

当然,如果我只是从textarea获取"原样"的文本,php会将每个新行计为两个或四个字符(\n,...).所以我试着用这样的东西替换它们:

strlen(str_replace(array("\r", "\n"), ' ', $text)))
Run Code Online (Sandbox Code Playgroud)

或这个:

strlen(preg_replace('/\s+/', ' ', trim($text)))
Run Code Online (Sandbox Code Playgroud)

但是,如果我得到例如10个段落并且jQuery返回2500个字符,则php将返回2510或2490,这取决于我是用空格替换新行还是完全删除它们.所以差异是20,但只有10个新线......?

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

Dog*_*ert 3

这应该有效:

strlen(str_replace("\r", '', $text)))
Run Code Online (Sandbox Code Playgroud)

解释:

strlen(str_replace(array("\r", "\n"), ' ', $text)))

在这里,您将 \r 和 \n 替换为空格,因此字符数并没有真正改变。

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

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

  • 你可以向他解释为什么 `/\s+/` 在这里不起作用。也就是说,他用“/\s+/”折叠了空格。为了确定起见,我将使用 `preg_replace('/(?:\r|\n)/', ' ', trim($text))` 。 (2认同)