#coldfusion #character-encoding #urldecode
#coldfusion #кодировка символов #urldecode
Вопрос:
Я использую WYSIWYG, чтобы позволить пользователям форматировать текст. Это текст, вызывающий ошибку:
<p><span style="line-height: 115%">This text starts with a 'T'</span></p>
Ошибка в том, что ‘T’ в «This» или какой бы ни была первая буква, случайно удаляется при использовании URLDecode и сохранении в БД. Удаление URLDecode на стороне сервера, похоже, исправляет это без каких-либо негативных побочных эффектов (база данных содержит ту же информацию).
В документации говорится, что
Строки запроса в HTTP всегда кодируются в URL.
Так ли это на самом деле? Если да, то почему удаление URLDecode, похоже, все не портит?
Итак, два вопроса:
- Почему URLDecode приводит к удалению первого текстового символа подобным образом (кажется, это происходит только при наличии свойства line-height)?
- Действительно ли мне нужно (или я бы даже хотел) использовать URLDecode перед помещением опубликованных данных в базу данных?
Редактировать: я создал тестовую страницу для эхо-отображения декодированного текста, и URLDecode определенно удаляет этот символ, но я понятия не имею, почему.
Ответ №1:
Я полагаю, что декодирование выполняется автоматически, когда form
область заполнена. Вот почему символы после %
(этот символ используется для кодирования) удаляются — вы пытаетесь декодировать строку во второй раз.
По соображениям безопасности вам может быть интересно удалить script
теги или даже очистить HTML с помощью белого списка. Попробуйте выполнить поиск в CFLib.org для применимых функций.
Комментарии:
1. Хорошо, это имеет смысл. Я запустил другой тест, и ‘%»> Th’ переходит в ‘$»> h’. Можно ли считать это ошибкой со стороны CF? Я предполагаю, что это неверный синтаксис, но поведение в этом условии кажется неустойчивым. В любом случае, спасибо за информацию о
form
области.2. Кодирование использует знак% для кодирования значений в шестнадцатеричном формате. Итак, — это пробел. Итак, ваш URLDecode пытается выяснить, что означает%»> Th, и в этом случае приводит к странным результатам.