在我的控制器中,我使用$this->request->data['Comment']['text']
. 我使用 CakePHP 的 formhelper 构建表单,并使用一个名为 Summernote 的插件将 textarea 转换为 WYSIWYG 编辑器。我将评论保存为我的数据库中的 HTML。
在这种情况下,我尝试仅使用“>”提交评论
$data = $this->request->data['Comment']['text'];
pr($data);
//returns >
pr(mb_strlen($data, utf-8));
//returns 4
pr(mb_strlen('>', utf-8));
//returns 1
//that is the one that confuses me the most,
//it seems that there's a difference between $data and '>'
mb_detect_encoding($data);
//returns ASCII
我已经在使用 jQuery 来检查在前端输入的字符数,所以当用户超过限制时我可以停用提交按钮。这使用.innerText.length
和工作就像一个魅力,但如果我这样做,唯一的检查人员可以进入元素编辑器并重新启用提交按钮以发送他们喜欢的长评论。
编辑: var_dump($this->request->data['Comment']['text']) 给了我以下结果:
请注意,与上面的示例不同,我尝试在此处发送“>>>”
array (size=1)
'text' => string '>>>' (length=12)
编辑:Alex_Tartan 发现了问题:我需要先对我的字符串执行 html_entity_decode(),然后再用 mb_strlen() 计算它!