Это интересная проблема.
Я думаю, что решение будет проблемой, если вы возложите на них какую-либо ответственность из-за санитарной обработки. Если они несут ответственность за угадывание максимальной длины, тогда они могут сдаться и выбрать что-то другое (и не понять, почему их ввод был неверным).
Вот моя идея: сделать поле базы данных на 150% больше размера ввода. Этот дополнительный размер служит «заполнением» для пространства шестнадцатеричной очистки, и максимальный размер, показанный пользователю и валидатору, является фактическим желаемым размером. Таким образом, если вы проверяете длину ввода до санации, и она ниже 66% предела длины ваших санированных данных, то должно быть хорошим. Если они превышают это дополнительное 34% -ое пространство поля для буфера, то ввод, вероятно, не должен быть принят.
Единственная проблема в том, что ваши таблицы базы данных будут больше. Если вы хотите избежать этого, вы всегда можете экранировать только чувствительные к SQL символы и обрабатывать все остальное при выводе.
Редактировать: Учитывая ваш пример, я думаю, что вы слишком много избегаете. Либо используйте меньший диапазон очистки с HTMLSpecialChars()
на выходе, либо увеличьте поля вашей базы данных до 200% от их нынешнего размера. Это просто раздутый, если вы спросите меня.