Подавить имя HTML персонажа (например, кавычки или &) в форме ColdFusion - PullRequest
0 голосов
/ 21 января 2011

У меня есть форма ColdFusion, от которой мне нужно очистить какой-то оскорбительный код и при этом сохранить некоторые пунктуацию.

В своей разработке я настроил функцию с ReReplaceNoCase() и кучу RegEx, чтобы очистить практически все и оставить меня с 3 различными переменными.один используется для переименования фотографии, другой получает альтернативное название объявления, а третий становится заголовком продукта в теге <h1>

. Но я столкнулся со странной проблемой.Во входных данных я получаю имя HTML для некоторых вещей, таких как &quot; для двойных кавычек, но не для одиночных кавычек.

Например, когда у меня есть строка типа ""Great" leather harnesses & More!", я получаю 3 строки, пригодные дляпроект:

_Great_leather_harnesses_and_more_ - который совпадает с .jpg, чтобы стать именем файла

Great leather harnesses and more - который становится атрибутами alt и title

и Great leather harnesses and more! -становится моим <h1>

Беда в том, что моя форма отправляет &quot; для двойных кавычек и &amp; для & but ! для восклицательного знака.

Что я могу сделатьзаставить мою форму публиковать ТОЛЬКО символ в моей функции, чтобы мне не приходилось просматривать каждый символ с именем HTML и убирать его?Между прочим, я получаю те же результаты с <input type="text"... и <textarea>.

Вот мои скребущие кусочки RegEx:

<cfset string = #form.product_name#>
    <cfset replaceQuotes = ReReplaceNoCase(string, "(&quo;)", "", "all")>
    <cfset replaceAnd = ReReplaceNoCase(replaceQuotes, "(&amp;)|(&)|(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, поэтому я уверен, что есть более разумный способ сделать это.Но этот механизм работает, в основном.

1 Ответ

0 голосов
/ 22 января 2011

Ваше подозрение верно, HTMLEditFormat () - это проблема - http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7847.html - он ускользает <>&".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...