вопрос переменной URL-адреса coldfusion - PullRequest
0 голосов
/ 12 сентября 2011

Иногда мы передаем строки URL, такие как:

http://www.oursite.com/index.cfm?layout=displayNews&newsArticle=1837

Обратите внимание на "&" в URL. Это вызывает проблемы на принимающей странице, которая видит переменную url как url.AMP;newsArticle. Мы не всегда можем контролировать, будет ли она получена таким образом или как "&".

На странице получения мы хотели бы иметь дело с возможностью того, что любой формат может появиться. Я сделал несколько слабых попыток, которые не работают, например

<cfif structkeyexists(url,'AMP;NEWSARTICLE')>
     <cfset url.newsArticle = evaluate('#url.AMP;NEWSARTICLE#')> <!--- this line errors on the semicolon after AMP --->
</cfif>

Любые указатели очень ценятся.

Ответы [ 3 ]

4 голосов
/ 12 сентября 2011

Замена строк в cgi.query_string не решит проблему, так как область URL заполняется в этот момент.

Вы можете ссылаться на значение в виде структуры:

<cfset url.newsarticle = url['amp;newsarticle']>

Объедините это с structKeyExists:

<cfif structkeyexists(url,'AMP;NEWSARTICLE')>
    <cfset url.newsarticle = url['amp;newsarticle]>
</cfif>

Расширяя это, вы можете отфильтровать всю область URL:

<cfloop collection="#url#" item="key">
    <cfif left(key,4) eq "amp;">
        <cfset url[replace(key,"amp;","")] = url[key]>
    </cfif>
</cfloop>
0 голосов
/ 12 сентября 2011

Возможно, есть более чистый способ ... но мне кажется, это работает (синтаксис предполагает CF9):

<cfscript>
    cleanURL = {};

    for ( var item in URL ) {
        if ( left( item, 4 ) == "amp;" ) {
            key = replaceNoCase( item, 'amp;', '' ); // right() also works here
        } else {
            key = item;
        }

        cleanURL[ key ] = URL[ item ];
    }
</cfscript>

<cfdump var="#cleanURL#" />
0 голосов
/ 12 сентября 2011

Вы можете попробовать

 replaceNoCase(cgi.query_string, '&amp;', '&', 'all')

Тогда просто обработайте это нормально .. таким образом, только html-сущности заменяются ...

-sean

...