ColdFusion — Нужен ли мне URLDecode для записей формы? / URLDecode случайным образом удаляет один символ

#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, похоже, все не портит?

Итак, два вопроса:

  1. Почему URLDecode приводит к удалению первого текстового символа подобным образом (кажется, это происходит только при наличии свойства line-height)?
  2. Действительно ли мне нужно (или я бы даже хотел) использовать URLDecode перед помещением опубликованных данных в базу данных?

Редактировать: я создал тестовую страницу для эхо-отображения декодированного текста, и URLDecode определенно удаляет этот символ, но я понятия не имею, почему.

Ответ №1:

Я полагаю, что декодирование выполняется автоматически, когда form область заполнена. Вот почему символы после % (этот символ используется для кодирования) удаляются — вы пытаетесь декодировать строку во второй раз.

По соображениям безопасности вам может быть интересно удалить script теги или даже очистить HTML с помощью белого списка. Попробуйте выполнить поиск в CFLib.org для применимых функций.

Комментарии:

1. Хорошо, это имеет смысл. Я запустил другой тест, и ‘%»> Th’ переходит в ‘$»> h’. Можно ли считать это ошибкой со стороны CF? Я предполагаю, что это неверный синтаксис, но поведение в этом условии кажется неустойчивым. В любом случае, спасибо за информацию о form области.

2. Кодирование использует знак% для кодирования значений в шестнадцатеричном формате. Итак, — это пробел. Итак, ваш URLDecode пытается выяснить, что означает%»> Th, и в этом случае приводит к странным результатам.