【问题标题】:Get same result for php `str_len ` as for jQuery `.val().length()`为 php `str_len` 获得与 jQuery `.val().length()` 相同的结果
【发布时间】:2012-08-10 15:18:27
【问题描述】:

我使用 jQuery 即时计算文本区域的值:

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 中?

【问题讨论】:

  • 你使用什么字符编码?您的客户端在哪个操作系统上运行? (Windows 使用与 unix 不同的行尾)。
  • @Maerlyn: 好吧,它会在我现在不知道是 windows 还是 linux 的网络服务器上运行,它只是共享主机......字符集是 utf8,但确实如此在这里重要吗?
  • 您可能必须在这两个地方标准化换行符。我认为您无法控制用户点击“返回”时默认插入的浏览器。
  • @Chris - strlen() 计数 字节,而不是 字符。如果您使用 UTF-8,它不适合您的任务。
  • @Chris utf8 是一个多字节字符集,您需要使用 mb_strlen 来计算字符而不是字节。

标签: php javascript jquery strlen


【解决方案1】:

这应该可行:

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

解释:

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

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

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

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

【讨论】:

  • 你可以向他解释为什么/\s+/ 在这里不能解决问题。那是/\s+/ 他正在折叠空间。为了确定,我会选择preg_replace('/(?:\r|\n)/', ' ', trim($text))
  • 谢谢你,多格伯特!不幸的是,它仍然给我错误的结果。我输入了 12345,然后是 5 个空格和 5 个新行 - jQuery 说 15,php 说 20...
  • @Chris,它似乎对我有用,对于 \r\n\n 行尾。您能否发布一小段演示该问题的 php/js 代码? codepad.org/ta5g8eUk
  • @Dogbert:你写的是str_replace("\r",...,你是说str_replace("\r\n",...吗?因为这现在对我有用,非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2019-10-29
  • 2021-02-17
相关资源
最近更新 更多