javascript - mb_strlen() 计算新行两次 - 与 JavaScript 中的 .length() 不同
问题描述
我遇到了这个问题,因为我们尝试通过 JavaScript 计算 textarea 字段中的字符并使用 PHP 验证字符数。当文本区域中的文本用换行符填充时,就会出现问题。
对于 JavaScript 中的计数,我们使用不更改输入文本(例如删除空格):
input.val().length
在 PHP 中,我们使用 mb_strlen() 进行计数,并通过设置编码和不设置编码对其进行了测试:
$length = mb_strlen($elements['#value'], 'UTF-8');
$length2 = mb_strlen($elements['#value']);
示例文本:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
此文本导致 JavaScript 和 PHP 中的字符数均为 424。
当我输入新行时(之前Donec quam felis,
)
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
JavaScript 中的字符数为 425,PHP 中为 426。我的目标是在 PHP 中获得与我相同的计数,并且用户不应将新行计算两次。
解决方案
我认为 PHP 将换行符计为\n
. 简单的方法是计算字符串中出现的次数并从长度中减去 if:
$newLines = substr_count($text, "\n");
$length = mb_strlen($elements['#value']) - $newLines;
推荐阅读
- scala - Spark 3.0.1 MinMaxScaler 提供混合向量类型
- opengl - 绘制可变数量的行 - PyOpenGL
- reactjs - ReactJS - 页面重新渲染,但一个组件保持不变。(美丽的拖放)
- microsoft-edge - 微软边缘 85.0.564.63 | 错误 | 使用键盘快捷键放大或缩小会影响同一站点域的所有窗口、选项卡
- angular - ASP.NET Core - Windows 10 Pro - 发布到 IIS - 指定的路径、文件名或两者都太长
- karate - 空手道框架中的 NTLM 身份验证
- fortran - 双精度复数最小值的限制
- java - 在while循环中查找倍数
- sql - 把一个句子分成不同的词
- r - 使用 str_detect 查找过去 n 次出现的平均值