修剪不在Coldfusion 8.0中工作

时间:2012-08-22 08:30:02

标签: html coldfusion coldfusion-8

我正在尝试修剪我的一个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>;
    }

2 个答案:

答案 0 :(得分:10)

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

 <cfcomponent output=false >

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

此外,不要忘记对变量使用JsStringFormat ,以确保其被适当转义:

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

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

答案 1 :(得分:1)

我已经测试了你当前的代码,它对我来说运行正常,我怀疑你的CFC可能会更多地返回你认为,我显然无法复制。我个人总是会确保组件返回“干净”的结果,而不是在事后删除垃圾字符:)

过去我遇到过类似的问题,而且cfoutput一直都是这样,从来没有深入到底。作为一个起点,我会以这种方式重写,看看它是否有所作为......

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