2010-02-05 3 views
1

나는 아래와 같은 블로그 데이터를 가지고있다 :내 블로그 게시물에서 외국 링크를 걸러 내고 싶습니다. 어떤 사람이 저와 정규 표현식을 도울 수 있습니까?

This is foreign <a href="xyz.com">link</a>, this is my site's <a href="mysite.com">link</a> and so on. 

내가 원하는 것은 외부 사이트의 링크, 즉 "<a href="xyz.com">link</a>"를 필터링하는 것이다. 그래서 내 마지막 출력은 다음과 같습니다 :

This is foreign link, this is my site's <a href="mysite.com">link</a> and so on. 

"preg_replace"를 시도했지만 패턴이 도움이되지 않았습니다.

+3

이 답변을 읽어 보시기 바랍니다. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

공유 해 주셔서 감사합니다. 이 일을 다른 방법으로 제안 할 수 있습니까? –

답변

1

정규식을 사용해서는 안됩니다.

DOM 파서와 같은 것을 사용해보세요. 당신이 PHP를 사용하고 있지만, 매우 쉽게이 하나를 사용하는 경우 나도 몰라

:이 도움이
http://simplehtmldom.sourceforge.net/

희망.

+0

공유해 주셔서 감사합니다. 이 내 문제를 해결 –

+0

@ Chetn Sharma, 그럼 당신은 이것을 "허용"대답으로 표시해야합니다 :) –

+0

오, 미안 해요, 말 해줘서 고마워. –

1

DOMDocument를 사용하여 모든 링크 요소를 찾고 그런 식으로 소스를 업데이트 할 수 있습니다. 나는 use DOMDocument to find all links에 대한 약간의 예를 썼다. 이 방법을 사용하여 일부 프로젝트에서 링크를 다시 작성했습니다. url이 호스트와 일치하지 않으면 더 이상 태그를 삭제하고 텍스트로 바꾸는 데 많은 노력을 기울이지 않을 것이라고 확신합니다.

2

먼저, 정규식이 HTML에 적합한 도구가 아니라고 이미 말한 사람들은 동의해야합니다. 싶은 것은 더 이상 복잡한

foo 

<a href="something.tld">foo</a> 

의 일체의 발행 수를 교체보다 긴 경우 something.tld 다음이 도메인이 아닌 경우

, 말했다 그 트릭을해야합니다

여기서 $ mystring은 수정하려는 문자열입니다. 그러나 이것은 정규 표현식을 사용하는데, 이것은 정규 표현식을 사용해서는 안된다는 것을 의미합니다.

HTH

0

난 강력하게 쉽게 링크 필터 (http://htmlpurifier.org/docs/enduser-uri-filter.html)를 쓰기뿐만 아니라 XSS 공격으로부터 당신을 보호하는 것뿐만 아니라 http://htmlpurifier.org/를 사용하는 것이 좋습니다 것입니다. 허용 된 HTML 구문 분석기를 사용하지 않는 경우 리터럴 및 이스케이프 HTML 특수 문자로 사용자 제공 데이터를 처리해야합니다.

+0

공유해 주셔서 감사합니다. –

관련 문제