В моем контроллере я получаю доступ к данным комментариев с помощью $this->request->data['Comment']['text']
, Я использую помощник по формам CakePHP для создания формы и плагин Summernote для преобразования текстовой области в редактор 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 ()!
Я проверил случай здесь: https://3v4l.org/VLr9e
Какие может быть будь то дело не обрезается $data
(пробелы не будут отображаться в обычной печати — вы можете использовать var_dump($data)
).
Тег textarea будет заключать в значение пробелы форматирования.
Проверять, выписываться Почему текстовая область заполнена таинственными пробелами?
так что для этого вы можете сделать:
$data = '> ';
$data = trim($data);
// var_dump(data) will output:
// string(4) "> "
echo $data."\n";
//returns >
echo mb_strlen($data, 'UTF-8')."\n";
//returns 1
echo mb_strlen('>', 'UTF-8')."\n";
//returns 1
Обновить (из комментариев):
Проблема была закодирована HTML-символы, которые должны были быть декодированы:
$data = html_entity_decode($data);
Других решений пока нет …