我正在将一个变量的值从一个 http url 发送到另一个 cfm 页面,但我不确定如何在另一个页面上获取该值。在 php 中我们使用$_GET['variable']
; 我不确定 ColdFusion 中的等价物是什么。
5 回答
ColdFusion 可以选择访问这些变量,就像您在 PHP 中所做的那样:
PHP:
$foo = $_GET['variablename'];
$bar = $_POST['variablename'];
CF 脚本:
foo = URL['variablename'];
bar = FORM['variablename'];
CFML:
<cfset foo = URL['variablename']>
<cfset bar = FORM['variablename']>
编辑:讨论表单范围不区分大小写和解决方法
ColdFusion 将(有帮助?)在表单范围内将所有表单字段名转换为大写。在字段名重复的情况下,多个值将合并为一个逗号分隔值。当您无法控制表单本身时,这可能会导致挫败感。
给定形式:
<form name="main" action="handler.cfm" method="post">
<input type="text" name="conFUSion" value="abc" />
<input type="text" name="CONfusion" value="def" />
<input type="submit" name="Submit" />
</form>
接收页面上的表单范围如下所示:
但是您可以使用gethttprequestdata().content
直接访问原始表单的大小写保留字段和值,如下所示:
conFUSion=abc&CONfusion=def&Submit=提交
由于 ColdFusion 结构不区分大小写,我们不能简单地将这个字符串解析为常规结构。相反,我们可以转向java.util.HashMap
,它非常类似于 ColdFusion 结构,但确实保留了大小写:
arFormscope = gethttprequestdata().content.split('&');
cs_form = createobject('java','java.util.HashMap').init();
for( i=1; i<=arraylen(arFormscope); i++ ){
arElement = arFormscope[i].split('=');
key = arElement[1];
value = arElement[2];
cs_form[key] = value;
}
转储cs_form
哈希图,我们得到:
...最后:
cs_form['CONfusion']; // def
cs_form['conFUSion']; // abc
cs_form['CONFUSION']; // Error, undefined in java.util.HashMap
用于#URL.variable#
GET。用于#FORM.variable#
POST。
有足够好的答案,但我只想补充一点,用于访问结构键的关联数组表示法的好处之一是您仍然可以访问语法上无效的键。因此,如果您创建了一个名为 test.cfm 的页面,如下所示:
<cfdump var="#url#">
<cfoutput>
#url['bad bad var name']#<br />
</cfoutput>
并这样称呼它:
http://localhost/test.cfm?bad bad var name=foo
您会在页面上看到“foo”输出。
但是,如果您尝试这样做:
<cfdump var="#url#">
<cfoutput>
#url.bad bad var name#
</cfoutput>
你会看到:
在第 3 行第 10 列发现无效的 CFML 构造。ColdFusion 正在查看以下文本:
坏的
因为变量名不能包含空格。
当然,没有人会故意用空格命名 URL 参数(我希望如此),但这对于诸如查询和外部数据之类的事情来说很方便,并且外部数据超出了开发人员的直接控制范围。
您可以使用#url.variable#
. 例如,在 PHP 中您可能拥有$_GET['id']
,而在 CF 中您可能拥有#url.id#
我以前在coldfusion 7中做过这个。
您可以使用 cgi.query_string 值来获取查询字符串,然后拆分如下:
httpGetValues = createobject('java','java.util.HashMap').init();
nameValuePairs = cgi.query_string.split('&');
for( i=1; i lte arraylen(nameValuePairs); i = i + 1 ){
pair= nameValuePairs[i].split('=');
key = URLDecode(pair[1], "UTF-8");
value = URLDecode(pair[2], "UTF-8");
httpGetValues[key] = value;
}
确保对这些值进行解码。