【问题标题】:Trim not working in Coldfusion 8.0修剪在 Coldfusion 8.0 中不起作用
【发布时间】:2012-08-17 15:23:16
【问题描述】:

我正在尝试修剪由我的 Coldfusion 组件之一返回的字符串,但无论我做什么 Coldfusion 在字符串的开头添加换行符,没有任何原因导致我的 Javascript 出错。你知道这段代码有什么问题吗?

function back(){            
        window.location = <cfoutput>"#Trim(Session.history.getBackUrl())#"</cfoutput>;
}

上面的代码产生了下面的 HTML:

function back(){
      window.location = "

            http://dummy_server_address/index.cfm?TargetUrl=disp_main";
}

查看这里的 Coldfusion 规格是修剪定义: 删除前导和尾随空格和控制字符后的字符串参数的副本。

所以它应该完成这项工作!因此,我想知道如何正确地做到这一点,我不想使用替换或一些类似的功能。

编辑:非常令人惊讶的是,这是有效的......但我不喜欢这个解决方案,所以如果你有任何其他想法,或者至少解释一下这种行为。

    <cfset backUrl = Session.history.getBackUrl()>
    function back(){            
            window.location = <cfoutput>"#backUrl#"</cfoutput>;
    }

【问题讨论】:

  • 为什么在从 Session.history.getBackUrl() 函数返回字符串时不直接使用 Trim() - 在函数本身中?
  • 试试 output=false 的 getBackUrl 函数。
  • 要添加到上面的“Sergii”评论 - 确保您的 showdebugoutput="false"enablecfoutputonly="true"

标签: html coldfusion coldfusion-8


【解决方案1】:

确保您的历史组件已禁用输出。即:

 <cfcomponent output=false >

然后确保 CFC 中的 getBackUrl 函数(以及所有其他函数)设置了output=false

另外,不要忘记在变量上使用JsStringFormat,以确保它被适当地转义:

<cfoutput>"#JsStringFormat( Session.history.getBackUrl() )#"</cfoutput>

否则,如果 URL 恰好包含 ",则存在 JavaScript 注入的潜在风险,或者只是 JS 错误。

【讨论】:

    【解决方案2】:

    我已经测试了您当前的代码,它对我来说运行良好,我怀疑您的 CFC 可能会返回比您想象的更多,我显然无法复制。我个人会始终确保组件返回“干净”的结果,而不是事后删除垃圾字符:)

    我过去也遇到过类似的问题,但结果总是与 cfoutput 相关,但从未深究。作为一个起点,我会以这种方式重写,看看它是否有所作为......

    <cfset variables.stWindowLocation = '"' & Trim(Session.history.getBackUrl()) & '"'> 
    <cfoutput>    
      function back() {            
        window.location = #variables.stWindowLocation#;}
    </cfoutput>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多