我正在尝试编写一个代码,该代码采用包含3部分(www)。(域名)。(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
错误导致我的错误联系表格以停止工作。
答案 0 :(得分: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>
答案 1 :(得分:4)
你可以这样做:
<cfscript>
local.nameArr = ListToArray(CGI.SERVER_NAME, '.');
if (ArrayLen(local.nameArr) gt 2) {
ArrayDeleteAt(local.nameArr, 1);
}
siteDomainName = ArrayToList(local.nameArr, '.');
</cfscript>
我已将服务器名称拆分为数组元素,并以句点作为分隔符。如果元素数大于2,则删除第一个元素。然后将其转换回列表,并将句点作为分隔符。
更新
正如Robb所建议的那样,通过跳过数组转换过程,这可能更简洁,性能更好:
<cfscript>
siteDomainName = CGI.SERVER_NAME;
if (ListLen(siteDomainName, '.') gt 2) {
siteDomainName = ListDeleteAt(siteDomainName, 1, '.');
}
</cfscript>
答案 2 :(得分:0)
我会使用正则表达式,因为您只想“修剪”某些子域(www
,dev
)。
<cfset the_domain = REReplaceNoCase(cgi.SERVER_NAME, "(www|dev)\.", "") />
只需在括号内使用|
- 分隔的子域名列表。