我试图在一个html块中使用转换网址以确保它们是小写的。 有些链接是大写和小写的混合,需要将它们转换为小写。 围绕网站运行并重做每个链接是不可能的,因此在输出文本时希望使用正则表达式。
<p>Hello world <a href="http://www.somelink.com/HOME">Some link</a>.</p>
需要转换为:
<p>Hello world <a href="http://www.somelink.com/home">Some link</a>.</p>
使用如下所示的ColdFusion Regex(虽然这不起作用):
<cfset content = Rereplace(content,'(http[*])','\L\1','All')>
任何帮助都非常感激。
答案 0 :(得分:4)
我想我会使用小写函数lCase()。
将您的网址放入变量中,如果它还没有:
<cfset MyVar = "http://www.ThisSite.com">
强制它在这里小写:
<cfset MyVar = lCase(MyVar)>
或者在这里:
<cfoutput>
<a href="#lCase(MyVar)#">Some Link</a>
</cfoutput>
更新:实际上,我看到你实际要问的是如何生成整个HTML页面(或很大一部分)然后返回它,找到所有链接,然后降低它们的情况。那是你想要做的吗?
答案 1 :(得分:4)
由于您将HTML存储在数据库中,因此除了使用lcase()
之外,还需要做更多的工作。我会将功能包装成一个可以轻松重用的功能。查看此代码以获取示例。
content = '<p>Hello world <a href="http://www.somelink.com/HOME">Some link</a>.</p>
<p>Hello world <a href="http://www.somelink.com/TEST">Some link</a>.</p>
<p>Hello world <a href=''http://www.somelink.com/BLARG''>Some link</a>.</p>';
writeDump( content );
writeDump( fixLinks( content ) );
function fixLinks( str ){
var links = REMatch( 'http[^"'']*', str );
for( var link in links ){
str = replace( str, link, lcase( link ), "ALL" );
}
return str;
}
这只在CF9&amp; CF10。
使用REMatch()
可获得一系列匹配项。然后,您只需循环遍历该数组,并使用replace()
和lcase()
将链接设为小写。
并且......基于Leigh的建议,这里是使用REReplace()
REReplace( content, '(http[^"'']*)', '\L\1', 'all' )
答案 2 :(得分:2)
使用HTML解析器解析HTML,而不是正则表达式。
以下是使用jQuery的方法:
<!doctype html>
<script src="jquery.js"></script>
<cfsavecontent variable="HtmlCode">
<p>Hello world <a href="http://www.somelink.com/HOME">Some link</a>.</p>
</cfsavecontent>
<pre></pre>
<script>
var HtmlCode = "<cfoutput>#JsStringFormat(HtmlCode)#</cfoutput>";
HtmlCode = jQuery('a[href]',HtmlCode).each( lowercaseHref ).end().html();
function lowercaseHref(index,item)
{
var $item = jQuery(item);
// prevent non-links from being changed
// (alternatively, can check for specific domain, etc)
if ( $item.attr('href').startsWith('#') )
return
$item.attr( 'href' , $item.attr('href').toLowerCase() );
}
jQuery('pre').text(HtmlCode);
</script>
这适用于href
标记上的a
属性,但当然可以针对其他内容进行更新。
它会忽略<a href="#SomeId">
之类的页内链接,但不会忽略<a href="/HOME/#SomeId">
之类的内容 - 如果这是一个问题,则需要更新函数以排除页面片段部分(例如,拆分{{1}然后重新加入,或其他)。如果你可能有区分大小写的查询字符串,那就相同了。
当然上面只是jQuery,因为我觉得这样 - 你也可以使用服务器端的HTML解析器,比如jSoup来实现这一点。