하이퍼 링크에 대한 http 링크를 찾아 교체해야합니다. 이러한 http 링크는 span 태그 안에 있습니다.PHP를 대체 할 DomDocument
$ 텍스트에는 html 페이지가 있습니다.
$doc = new DOMDocument();
$doc->loadHTML($text);
foreach($doc->getElementsByTagName('span') as $anchor) {
$link = $anchor->nodeValue;
if(substr($link, 0, 4) == "http")
{
$link = "<a href=\"$link\">$link</a>";
}
if(substr($link, 0, 3) == "www")
{
$link = "<a href=\"http://$link\">$link</a>";
}
$anchor->nodeValue = $link;
}
echo $doc->saveHTML();
그것은 확인을 작동합니다 스팬 태그 중 하나는 여기에
<span class="styleonetwo" >http://www.cnn.com/live-event</span>
내 코드가 같은 것을 가지고있다.
<span class="styleonetwo" > sometexthere http://www.cnn.com/live-event somemoretexthere</span>
분명히 코드 위에 늘이 상황을 위해 일 : 그러나 ... 나는이 범위 내의 데이터가 같은 경우에도 작업 할. preg_replace를 사용하지 않고 DOMDocument를 사용하여 패턴을 검색하고 바꿀 수있는 방법이 있습니까?
업데이트
:는 preg_replace이다 관한 필의 질문에 대답하려면 :\b(?:(?:https?|ftp|file)://|(www|ftp)\.)[-A-Z0-9+&@#/%?=~_|$!:,.;]*[-A-Z0-9+&@#/%=~_|$]
그것은 regexpal에서 제공하는 regextester에 좋은 작품 :
나는 다음과 같은 패턴 매칭을 테스트 regexpal.com을 사용했다. PHP 코드에서 같은 패턴을 사용하면 별난 오류가 발생했습니다. 이스케이프 문자에 대해서도 모르는 수정 자 오류가 있습니다! 다음은 preg_replace에 대한 코드입니다.$httpRegex = '/\b(\?:(\?:https?|ftp|file):\/\/|(www|ftp)\.)[-A-Z0-9+&@#/%\?=~_|$!:,.;]*[-A-Z0-9+&@#/%=~_|$]/';
$cleanText = preg_replace($httpRegex, "<a href='$0'>$0</a>", $text);
나는 "unknown modifiers"에 너무 좌절했고 내 문제를 해결하기 위해 DOMDocument를 추구했습니다.
'preg_replace() '의 문제점은 무엇입니까? – Phil
Phil, 질문을 업데이트했습니다. 감사. – love2code94
정규 표현식이 이스케이프 처리되지 않았습니다. 이스케이프 문자와 구분 기호를 이스케이프 처리해야합니다! – Tivie