2010-05-16 3 views
2

텍스트를 입력으로 가져오고 출력으로 HTML 링크로 만든 URL이 포함 된 텍스트를 돌려 주길 원합니다.PHP : URL 감지 (regexp)에 줄 바꿈이 포함되어 있습니다.

function autoLink($text) { 
    return preg_replace('/https?:\/\/[\S]+/i', '<a href="\0">\0</a>', $text); 
} 

을하지만이 제대로 작동하지 않습니다 다음과 같이

내 초안입니다. 들어있는 입력 텍스트의 경우

...
http://www.google.de/ 

... 나는 다음과 같은 출력을 얻을 :

<a href="http://www.google.de/<br">http://www.google.de/<br</a> /> 

왜 줄 바꿈을 포함 않습니다를? 어떻게하면 실제 URL로 제한 할 수 있습니까?

미리 감사드립니다.

답변

4

글쎄, <은 공백 문자가 아니기 때문에 it is matched by [\S]입니다. 당신은 허용 된 문자 당신의 세트에서 제외 할 수 있습니다

preg_replace('/https?:\/\/[^\s<]+/i', '<a href="\0">\0</a>', $text); 
+0

감사합니다.이 문제는 정상적으로 처리됩니다. 그러나 "와 ^"같은 다른 문자도 제외시킬 수 있다면 완벽 할 것입니다. 첫 번째 []에 써야합니까? – caw

+1

@ marco92w : 정확합니다. [^ ...] 내부의 모든 내용은 제외됩니다 – Heinzi

1

어떻게 Gruber's URL Regex를 사용하는 방법에 대해?

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))) 
+0

고마워, 재미있는 페이지.하지만 내 목적을 위해 위의 정규 표현식은 충분하다. 정규 표현식의 장점은 무엇인가? – caw

+1

@ marco92w : 정규식은 내 것이 아니다. 이것은 마크 다운을 "발명 한"사람과 같다. 예를 들어 정규 표현식 'ftp [s] : //'또는'www. *'(프로토콜 없음)를 자동 링크하지 않습니다. 이것을 읽고 테스트하십시오 : http://daringfireball.net/2009/11/liberal_regex_for_matching_urls –

+1

고맙습니다. 나는 모든 장점을 이해한다. – caw

관련 문제