3

我正在尝试编写一个代码,该代码采用一个包含 3 部分 (www).(domainname).(com) 的 URL,并完全修剪第一部分。

到目前为止,我有这段代码可以检查左侧是否没有“www”或“dev”进入并设置siteDomainName = removecharsCGI.SERVER_NAME,1,2);

if (numHostParts eq 3 and listfindnocase('www,dev',left(CGI.SERVER_NAME,3)) eq 0) {
        siteDomainName = removecharsCGI.SERVER_NAME,1,2);

上面代码的问题是只删除 2 个字符,我需要它删除所有字符,直到numHostParts eq 2或至少直到第一个“。”

另一个例子是:

akjnakdn.example.com 我需要代码来删除包含点的 URL 的第一部分 (akjnakdn.)

此代码将帮助我在网站上的一些查询停止粉碎,因为它们与#URL# 相关,并且当#URL# 是假的时,我收到cform query returned zero records导致我的联系表单停止工作的错误。

4

3 回答 3

6

你可以只使用listRest. 它返回列表中的所有元素,第一个元素除外。文档在这里http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-6d87.html

例子:

<cfscript>
name = cgi.server_name;
if (listlen(name,".") gte 3) {
  name = listRest(name,".");
}
</cfscript>
于 2012-04-17T20:10:09.563 回答
4

你可以这样做:

<cfscript> 
    local.nameArr = ListToArray(CGI.SERVER_NAME, '.');
    if (ArrayLen(local.nameArr) gt 2) {
        ArrayDeleteAt(local.nameArr, 1);
    }
    siteDomainName = ArrayToList(local.nameArr, '.');
</cfscript>

我已将服务器名称拆分为以句点为分隔符的数组元素。如果元素的数量大于两个,则删除第一个元素。然后将其转换回以句点为分隔符的列表。

更新

正如 Robb 所建议的,通过跳过数组转换过程,这可以更简洁并且性能更好:

<cfscript> 
    siteDomainName = CGI.SERVER_NAME;
    if (ListLen(siteDomainName, '.') gt 2) {
        siteDomainName = ListDeleteAt(siteDomainName, 1, '.');
    }
</cfscript>
于 2012-04-17T19:49:03.950 回答
0

I would use a regular expression, since you only want to "trim" certain subdomains (www,dev).

<cfset the_domain = REReplaceNoCase(cgi.SERVER_NAME, "(www|dev)\.", "") />

Just use a |-delimited list of subdomains you want to trim within the parentheses.

于 2012-04-17T20:19:52.703 回答