Есть для Joomla очень хороший компонент JComments. Позволяет добавлять практически для любого материала на сайте возможность комментирования. Обнаружился у них интересный баг. При добавлении комментария JavaScript считает количество введеных символов и выводит это под полем. И вот пишет она например что остался 1-2 символа. Сохраняем комментарий, а в результате получаем сообщение о том что превышена допустимая длина.
Все оказалось очень забавно
При небольшом тестировании выяснилось, что ошибка возникает при большом количестве переводов строк в вводимом комментарии.
Анализ кода дал следующие:
1. При подсчете с помощью JavaScript каждый перевод строки считается как два символа.
2. Дальше форма отправляется через AJAX. И здесь перевод строки — это один символ.
3. Самое интересное. При обработке данных в PHP скрипте все переводы строк заменяются на тег br и начинает занимать аж 6 символов.
4. Для подсчета символов используется функция компонента JCommentsText::strlen. А по сути все сводится к функции PHP strlen.
5. В результате длина строки считалась больше чем было на самом деле.
Самым простым способом было исправить функцию JCommentsText::strlen, добавив в нее первым оператором следующую строку:
$str = preg_replace('#
]*?/?>#si', "\r\n", $str);
Дешево и сердито.
Запись опубликована в рубрике
Полезности,
Фриланс с метками
jcomments,
joomla,
PHP. Добавьте в закладки
постоянную ссылку.
Ошибка в JComments
Есть для Joomla очень хороший компонент JComments. Позволяет добавлять практически для любого материала на сайте возможность комментирования. Обнаружился у них интересный баг. При добавлении комментария JavaScript считает количество введеных символов и выводит это под полем. И вот пишет она например что остался 1-2 символа. Сохраняем комментарий, а в результате получаем сообщение о том что превышена допустимая длина.
Все оказалось очень забавно
При небольшом тестировании выяснилось, что ошибка возникает при большом количестве переводов строк в вводимом комментарии.
Анализ кода дал следующие:
1. При подсчете с помощью JavaScript каждый перевод строки считается как два символа.
2. Дальше форма отправляется через AJAX. И здесь перевод строки — это один символ.
3. Самое интересное. При обработке данных в PHP скрипте все переводы строк заменяются на тег br и начинает занимать аж 6 символов.
4. Для подсчета символов используется функция компонента JCommentsText::strlen. А по сути все сводится к функции PHP strlen.
5. В результате длина строки считалась больше чем было на самом деле.
Самым простым способом было исправить функцию JCommentsText::strlen, добавив в нее первым оператором следующую строку:
Дешево и сердито.