【发布时间】: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