JavaEye3.0开发手记之二 - rails的UTF-8支持造成的正则表达式问题2011-11-20 javaeye robbinrails的ActionView::Helpers::TextHepler模块提供了很多实用的方法,这些方法对于论坛类应用非 常有用,例如 auto_link这个方法可以自动检测传入字符串当中的URL,并将其自动转换为HTML超链接格 式,这对于显示帖子的内容来说很不错。但是在开发JavaEye3.0的时候,却发现auto_link有bug,一旦帖子当中的URL后面紧跟中文的话, auto_link就会把URL后面所有的中文当做URL的一部分进行格式化,直到碰到空格为止,例如:引用http://www.javaeye.com网站很不错就会被格式化为:引用<a href="http://www.javaeye.com网站很不错">http://www.javaeye.com网站很不错 </a>看来得到rails的源代码里找答案了。打开netbeans,敲快捷键Ctrl+O,在弹出窗口输入:texthelper,回车,netbeans已经帮我打开了 text_helper.rb源代码,通过Navigator窗口,很方便的定位到auto_link方法,仔细看一下,原来主要是 这个正则表达式在起作用:Ruby代码
AUTO_LINK_RE = %r{ ( # leading text <w+.*?>| # leading HTML tag, or [^=!:""/]| # leading punctuation, or ^ # beginning of line ) ( (?:https?://)| # protocol spec, or (?:www.) # www.* ) ( [-w]+ # subdomain or domain (?:.[-w]+)* # remaining subdomains or domain (?::d+)? # port (?:/(?:(?:[~w+%-]|(?:[,.;:][^s$]))+)?)* # path (?:?[w+%&=.;-]+)? # query string (?:#[w-]*)? # trailing anchor ) ([[:punct:]]|s|<|$) # trailing text }x unless const_defined?(:AUTO_LINK_RE)