2012-02-12 6 views
0

확인. 그래서 html에 bbcoded 문자열을 구문 분석 할 함수를 작성 중입니다. BBCode의 링크의 구조는 매우 같다 :PHP BBCode 및 링크

[url=http://somelink.com/]Link[/url] 

그리고 나는 그것을 만들고 싶어 :

<a href="http://somelink.com/">Link</a> 

을 그러나 나는 또한 링크가 유효한 경우 XSS로부터 자신을 보호하기 위해, 확인하고 싶습니다. 나는 유효한 링크를 확인하기 위해이 정규식을 발견, 나는 그것이 HTML로 구문 분석 한 후 URL이 유효이고 있는지 확인하기 위해 $ str을하고 foreach는 일치으로, preg_match_all하려고

/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ 

그리고 지금, 그러나 그것은 보인다 I 그것을 할 수 없다. 어떤 제안?

+0

당신이 그것을 어떻게하려고 않았다 BBCode는을 구문 분석 PECL extension를 사용할 수 있습니까? 어떤 출력/오류가 있습니까? –

+0

웹에서 사용할 수있는 자격 종목 중 하나를 선택하면이 모든 사항이 적용됩니다. Github에는 몇 가지 목록이 있습니다. http://github.github.com/github-flavored-markdown/ –

+0

여기에 소보 란 코드 조각이 있습니다 : $ links = array(); if (preg_match ('/ \ [url = (. *) \] (. *) \ [\/url \] /', $ str, $ links)) { echo '

' . print_r($links, true) . '
'; } 내가 원하는 것과 일치하지 않습니다. – nvlbg

답변

0

PHP에 내장 된 Filter 모듈을 살펴보십시오. PHP 5.2부터 사용 가능하며 유효한 URL을 필터링하기 위해 상수 인 FILTER_VALIDATE_URL을 포함합니다. 일부 usage examples을 참조하십시오.

이 개인적으로는 사용하지 않았지만 정규 내장 언어 기능에 대한 중계가 정규 표현식을 사용하지 않는 것보다 훨씬 안전하다고 생각합니다.

+0

이것은 내가 가진 문제가 아닙니다. – nvlbg

+0

이상을 지정하십시오 :) – J0HN

+0

BBCode를 html로 바꾸고 유효한 URL을 검사하는 정규식을 만들 수 없습니다. – nvlbg