正则表达式功能在ColdFusion页面上正确显示超链接

时间:2014-09-17 14:35:10

标签: regex web hyperlink coldfusion webpage

我正在尝试解决某个[Coldfusion生成的PAGE] [1]的问题。请注意,我对ColdFusion及其工作原理知之甚少。因此,如果您需要更多信息,请告诉我,我会尝试跟踪它。

在"如何申请"页面的一部分意味着包含某个网站的URL。但是,该页面仅显示可点击超链接格式的URL的第一部分。 /之后的所有内容都显示为纯文本。你能建议一个解决方案吗?以下是网址在网页上的显示方式:

  

http://example.com/作业空缺

请注意,这些部分是从数据库中提取的,并在网页中动态显示。此图显示了文本在数据库中的显示方式:

image of text in database

这是job.cfm的内容:

<cfset Application.controller.job()>

这是Application.cfm的内容:

<cfapplication name="UK_AC_UEL_JOBSEARCH"
            sessionmanagement="true"
            setclientcookies="false"
            setdomaincookies="false">
<cfscript>
function onRequestStart()
{
    var formKeys = StructKeyList(Form);
    var urlKeys = StructKeyList(URL);
    var key = "";
    var value = "";
    var i = 0;

    // ....
    if (NOT StructKeyExists(Application, "controller"))
    {
        Application.controller = CreateObject("component", "uk.ac.uel.jobsearch.controller.Controller");
    }
    // ....
}
onRequestStart();

更新1

我仍然在寻找包含实际呈现相关页面的文件的过程。我能够找到Controller.cfc,但它似乎并不直接负责呈现页面。进一步搜索后,这里是我认为呈现页面部分的代码:

<div class="display-item last"> 
   <div id="how-to-apply"> 
      <h2>How to apply</h2>              
      <p>#formatWithLinks(Arguments.data.ApplicationProcedure)#</p> 
      <dl> 
          <dt>Closing date</dt> 
          <cfif Arguments.data.HasClosingDate> 
             <dd>#DateFormat(Arguments.data.ClosingDate, "D MMMM YYYY")#</dd> 
          <cfelse> 
             <dd>None: ongoing recruitment</dd> 
          </cfif> 
      </dl> 
   </div> 
</div> 

我不知道应该改变什么来解决这个问题。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

嗨大家刚刚到底,函数formatWithLinks是解决这个问题的关键,它在view.cfc文件中被发现为@Leigh建议(谢谢),这里是函数的完整代码:

<cffunction name="formatWithLinks" output="false" returntype="string">
    <cfargument name="input" />
    <cfscript>
        var output = Arguments.input;
        /*var httpREWithProtocol = "(?x)
                (
                    ((https|http):\/\/)     ## protocol
                    (
                        [a-zA-Z]{1}         
                        ([\w-]+\.)+
                        ([a-zA-Z]{2,})      ## top level domain
                    )                       ## domain name
                    (:[\d]{1,5})?           ## port number
                    ((/?\w+/)+|/?)
                    (\w+\.[\w]{3,4})?
                    ((\?\w+=\w+)?
                    (&\w+=\w+)*)?
                )";*/
        var httpREWithoutProtocol = "(?x)
                (\s)                        ## Space requirement here means this won't match beginning of string
                (
                    (
                        [a-zA-Z]{1}         
                        ([\w-]+\.)+
                        ([a-zA-Z]{2,})      ## top level domain
                    )                       ## domain name
                    (:[\d]{1,5})?           ## port number
                    ((/?\w+/)+|/?)
                    (\w+\.[\w]{3,4})?
                    ((\?\w+=\w+)?
                    (&\w+=\w+)*)?
                )";
        var httpREWithoutProtocolBeginningOfString = "(?x)
                ^                           ## Match string here; I don't like doing it this way, but at least it works
                (
                    (
                        [a-zA-Z]{1}         
                        ([\w-]+\.)+
                        ([a-zA-Z]{2,})      ## top level domain
                    )                       ## domain name
                    (:[\d]{1,5})?           ## port number
                    ((/?\w+/)+|/?)
                    (\w+\.[\w]{3,4})?
                    ((\?\w+=\w+)?
                    (&\w+=\w+)*)?
                )";
        var emailRE = "(?x)
                (
                    [\S]+@                      ## user
                    [a-zA-Z]{1}             
                    ([\w-]+\.)+
                    ([a-zA-Z]{2,})
                )";
        output = REReplace(output, "<[^>]*>", "", "all");
        output = XMLFormat(output);
        //output = REReplace(output, httpREWithProtocol, "<a href=""\1"">\1</a>", "all");
         output = REReplaceNoCase(output,"(\bhttp://[a-z0-9\.\-_:~@##%&/?+=]+)", "<a href=""\1"">\1</a>", "all");
        output = REReplace(output, httpREWithoutProtocol, "\1<a href=""http://\2"">\2</a>", "all");
        output = REReplace(output, httpREWithoutProtocolBeginningOfString, "<a href=""http://\1"">\1</a>", "all");
        output = REReplace(output, emailRE, "<a href=""mailto:\1"">\1</a>", "all");
        return output;
    </cfscript>
</cffunction>

谢谢大家试图提供帮助。我非常感谢你的努力

答案 1 :(得分:0)

application.cfm不是您的问题所在。看看实际呈现页面的cfm。你可能会发现这样的东西......

<a href="http://example.com/">http://example.com/</a>#section#

将其更改为......

<a href="http://example.com/#section#">http://example.com/#section#</a>

你应该是金色的。请注意,哈希标记之间的所有内容都是动态ColdFusion变量。您的变量名称可能会非常不同。