2010-08-05 2 views
1

나는 클릭 가능한 링크 URL을 만들기 위해이 기능을 사용하지만, 문제는 단지 그 문자 이전에 클릭 가능한 링크가되는 URL의 일부 유니 코드 문자가 ...있을 때유니 코드 문자가 포함 된 URL을 클릭 가능한 링크로 변환하는 방법은 무엇입니까?

기능 :

function clickable($text) { 
    $text = eregi_replace('(((f|ht){1}tp://)[[email protected]:%_\+.~#?&//=]+)', 
          '<a class="und" href="\\1">\\1</a>', $text); 
    $text = eregi_replace('([[:space:]()[{}])(www.[[email protected]:%_\+.~#?&//=]+)', 
          '\\1<a href="http://\\2">\\2</a>', $text); 
    $text = eregi_replace('([_\.0-9a-z-][email protected]([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', 
          '<a href="mailto:\\1">\\1</a>', $text); 

return $text; 

} 

이 문제를 해결하는 방법?

+0

문자 클래스와 하드 코딩'A-ZA-Z'를 교체하십시오,': 자리 : ', ': alpha :'와': lower :'와': upper :'등등? – sarnold

+0

* (sidenote) * [POSIX Regex functions] (http://www.php.net/manual/en/ref.regex.php)는 PHP 5.3.0부터 사용되지 않습니다. 대신 [PCRE family] (http://www.php.net/manual/en/book.pcre.php)를 사용해보십시오. – Gordon

답변

1

먼저 eregi_replace을 사용하지 마십시오. 유니 코드와 함께 사용하는 것이 가능하지 않다고 생각합니다. PHP 5.3에서 가치가 떨어졌습니다. preg_replace을 사용하십시오.

은 그럼 당신은 그런 일

preg_replace("/(https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#]*(\?\S+)?)?)?/u", '<a href="$0">$0</a> 

편집 시도 할 수 있습니다 - # 문자를 포함하도록 업데이트 표현을

+0

잘 작동합니다. 감사합니다. –

+0

URL에 # 기호가 있으면 문제가 하나 있습니다! 그것을 고치는 방법? –

+0

답변이 업데이트되었습니다. –

0

것은

당신은 정규 표현식에 here

를 유니 코드 처리의 세부 사항을 찾을 수 있습니다 \ P는 {L} 대신-ZA-Z와 \ P는 {LL}를 사용하는 대신 AZ

시도하고 얻을 deprecated ereg 함수보다는 preg 함수를 사용하는 습관

관련 문제