从结构中替换整个html代码块的正确方法是什么?

时间:2013-03-26 19:18:54

标签: validation coldfusion

我的问题是我有一个带有wysiwyg编辑器的文本区域。

现在,当用户提交表单并且没有在字段中输入任何内容时,这就是发布的内容:<span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-end-marker"></span><span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-start-marker"></span><p><br></p>

现在,我想让字段成为必需字段,并希望进行验证以检查字段是否为空,但它永远不会真正为空,因为编辑器放在那个html中。

所以我虽然做了这样的事情:

<cfset searchfor = "&lt;span class=&quot;sceditor-selection&quot; style=&quot;line-height: 0; display: none;&quot; id=&quot;sceditor-end-marker&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sceditor-selection&quot; style=&quot;line-height: 0; display: none;&quot; id=&quot;sceditor-start-marker&quot;&gt;&lt;/span&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;">

    <cfif StructKeyExists(params.event, "summary_en")>
        <cfset 'params.event.summary_en' = Replace('params.event.summary_en', '#searchfor#', "", "All")>
    </cfif>

    <cfif params.event.summary_en eq "">
        ERROR
    <cfelse>
        PROCESS
    </cfif>

但是,上面的代码并没有像我想要的那样将params.event.summary_en设置为“”或[empty string],而是将params.event.summary_en放在params.event.summary_en中。

因此,出于某种原因,我上面的代码正在替换它:<span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-end-marker"></span><span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-start-marker"></span><p><br></p>

params.event.summary_en

知道为什么会发生这种情况,以及我是否正确地以正确的方式对该领域进行验证?

感谢。

3 个答案:

答案 0 :(得分:1)

以下代码在CF10,282462上返回'ERROR'您使用的是什么版本的CF?

<cfset params.event.summary_en = '<span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-end-marker"></span><span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-start-marker"></span><p><br></p>' />
<cfset searchfor = '<span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-end-marker"></span><span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-start-marker"></span><p><br></p>'>

<cfif StructKeyExists(params.event, "summary_en")>
    <cfset params.event.summary_en = Replace(params.event.summary_en,searchfor, "", "All")>
</cfif>

<cfif params.event.summary_en eq "">
    ERROR
<cfelse>
    PROCESS
</cfif>

答案 1 :(得分:0)

如果使用jsoup

<cfset jsoup = CreateObject("java", "org.jsoup.Jsoup")>
<cfset whitelist = CreateObject("java", "org.jsoup.safety.Whitelist")>

<cfset params.event.summary_en = '<span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-end-marker"></span><span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-start-marker"></span><p><br></p>'>

<cfset safeString = Jsoup.clean(params.event.summary_en, whitelist.none())>

<cfif Len(Trim(safeString))>
    PROCESS
<cfelse>
    ERROR
</cfif>

我正在使用whitelist.none()来确保从字符串中删除所有标记。

答案 2 :(得分:0)

如果你有一个大字符串进出不同的引号并且你不想转义它们,你总是可以使用cfsavecontent来保存字符串。

<cfSaveContent var = "params.event.summary_en">
<span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-end-marker"></span><span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-start-marker"></span><p><br></p>
</cfSaveContent>

您只需要注意一些细微差别,例如上面的代码可能会匹配字符串的精确副本,但由于添加了用于格式化的空白区域,下面的字符串可能不匹配。但是,如果您只是将值存储到其他位置输出,它仍然可以正常工作。

<cfSaveContent var = "params.event.summary_en">
    <span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-end-marker"></span>
    <span class="sceditor-selection" style="line-height: 0; display: none;" id="sceditor-start-marker"></span>
    <p>
        <br>
    </p>
</cfSaveContent>

对于记录,您可以在字符串中使用与包含引号相同的引号,但它很难看。

<cfset x = "<img src = ""yourImage.jpg"" class = ""yourClass"">">