3

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);

上記のコードの問題はnumHostParts eq 2、最初の「。」まで、または少なくともすべての文字を削除する必要がある場合に、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>

サーバー名を区切り文字としてピリオドを使用して配列要素に分割しました。要素の数が 2 を超える場合は、最初の要素を削除します。次に、ピリオドを区切り文字としてリストに変換します。

アップデート

Robb が提案したように、配列変換プロセスをスキップすることで、これはより簡潔になり、パフォーマンスが向上する可能性があります。

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

www特定のサブドメイン ( , )のみを「トリミング」したいので、正規表現を使用しますdev

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

|削除するサブドメインを - で区切ったリストを括弧内に使用するだけです。

于 2012-04-17T20:19:52.703 に答える