【发布时间】:2017-06-01 10:50:12
【问题描述】:
在我的控制器中,我使用$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 并且像一个魅力一样工作,但如果我进行唯一的检查,人们可以进入元素编辑器并重新启用提交按钮以发送他们喜欢的长 cmets。
编辑: var_dump($this->request->data['Comment']['text']) 给了我以下结果:
请注意,与上面的示例不同,我尝试在此处发送“>>>”
array (size=1)
'text' => string '>>>' (length=12)
编辑: Alex_Tartan 发现了问题:在用 mb_strlen() 计算字符串之前,我需要先对字符串执行 html_entity_decode()!
【问题讨论】:
-
了解您在表单字段中输入的内容会很有用!
-
你试过用 print_r() 代替 pr() 吗?编辑:它必须与编码有关->检查此link
-
@RiggsFolly 我输入了 '>',只是单个字符。
标签: php cakephp character-encoding charactercount