У меня есть форма ColdFusion, от которой мне нужно очистить какой-то оскорбительный код и при этом сохранить некоторые пунктуацию.
В своей разработке я настроил функцию с ReReplaceNoCase()
и кучу RegEx, чтобы очистить практически все и оставить меня с 3 различными переменными.один используется для переименования фотографии, другой получает альтернативное название объявления, а третий становится заголовком продукта в теге <h1>
. Но я столкнулся со странной проблемой.Во входных данных я получаю имя HTML для некоторых вещей, таких как "
для двойных кавычек, но не для одиночных кавычек.
Например, когда у меня есть строка типа ""Great" leather harnesses & More!"
, я получаю 3 строки, пригодные дляпроект:
_Great_leather_harnesses_and_more_
- который совпадает с .jpg
, чтобы стать именем файла
Great leather harnesses and more
- который становится атрибутами alt и title
и Great leather harnesses and more!
-становится моим <h1>
Беда в том, что моя форма отправляет "
для двойных кавычек и &
для & but !
для восклицательного знака.
Что я могу сделатьзаставить мою форму публиковать ТОЛЬКО символ в моей функции, чтобы мне не приходилось просматривать каждый символ с именем HTML и убирать его?Между прочим, я получаю те же результаты с <input type="text"...
и <textarea>
.
Вот мои скребущие кусочки RegEx:
<cfset string = #form.product_name#>
<cfset replaceQuotes = ReReplaceNoCase(string, "(&quo;)", "", "all")>
<cfset replaceAnd = ReReplaceNoCase(replaceQuotes, "(&)|(&)|(amp;)", " and ", "all")>
<cfset replacePercent = ReReplaceNoCase(replaceAnd, "\%", " Percent ", "all")>
<cfset scrubName = ReReplaceNoCase(replacePercent, "[^a-zA-Z0-9]", "_", "all")>
<cfset cleanFileName = ReReplaceNoCase(scrubName, "[_]{2,}", "_", "all")>
<cfset cleanAlt = ReReplaceNoCase(scrubName, "[_]", " ", "all")>
<cfset headlinetoClean = ReReplaceNoCase(replacePercent, "[^a-zA-Z0-9.,!'\-\+]", " ", "all")>
<cfset cleanHeadline = ReReplaceNoCase(headlinetoClean, "[\s]{2,}", " ", "all")>
Если это имеет значение, я объявляю<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
в заголовке страницы ...
Редактировать - Добавлена форма и код проверки -
И моя форма:
<cfform name="newProduct" id="newProduct" >
<label for="product_name">Product Name: </label><cfinput name="product_name" id="product_name" style="width:300px;"/>
<cfinput name="submit" id="submit" type="submit" value="Create Page" />
</cfform>
Некоторая проверка - я подозреваюэто может быть проблемой?:
<cfif not len(trim(form.product_name))>
<cfset arrayAppend( errors, "You forgot to name the product")>
<cfelse>
<cfset form.product_name = htmlEditFormat(trim(form.product_name))>
</cfif>
Я довольно новичок в этом RegEx, поэтому я уверен, что есть более разумный способ сделать это.Но этот механизм работает, в основном.