2011-03-14 8 views
0

메신저 php 및 DomDocument가 재생 중입니다. 기본적으로 일부 html은 db에 저장되어 있습니다. 다른 URL 앵커 태그로 .... 나는 #PHP 태그 속성 가져 오기 및 설정

로 대체 할 allowedurl 목록 내에서 앵커 태그하는 HREF하지를 강제 할 예 DB1

<table cellspacing="0" cellpadding="0"> 
<tbody> 
    <tr> 
     <td valign="top"> 
      <a href="viewprofile.php?userid=780">Edrine Kasasa </a> has &nbsp; 
     </td> 
     <td valign="top"> 
     invited 10 friend(s) to veepiz using the <a href="invite.php">Invite Tool</a> 
     </td> 
    </tr> 
</tbody> 

에서

$allowed_url_basenames = array('viewprofile.php','viewalbum.php'); 

샘플 내용

나는 첫 번째 앵커 태그 href를 그대로두고 두 번째를 href = '#'로 변경하는 PHP 함수를 원합니다.

답변

2

이것은 매우 간단합니다.

먼저 모든 앵커 태그를 가져와 봅시다. $docwith your HTML as the source을 작성한 문서입니다.

$anchors = $doc->getElementsByTagName('a'); 

이제 우리는 그들을 하나씩 통과하고 href 속성을 검사 할 수 있습니다. 인데, 전달 된 문자열이 블랙리스트에있을 때 contains_bad_urltrue을 반환한다고 가정합니다. 직접 작성해야합니다.

foreach($anchors as $anchor) 
    if($anchor->hasAttribute('href') && contains_bad_url($anchor->getAttribute('href'))) { 
     $anchor->setAttribute('href', '#'); 
    } 
} 

타다. 그게 전부 일 것입니다. get the results back as an XML string까지 할 수 있고 나머지는 무엇이든해야합니다.

1

고맙습니다 찰스 ....이

function contains_bad_urls($href,$allowed_urls) 
{ 
    $x=pathinfo($href); 
    $bn=$x['filename']; 
    if (array_search($bn,$allowed_urls)>-1) 
    { 
     return false; 
    } 
    return true; 
} 

function CleanHtmlUrls($str) 
{ 
    $allow_urls = array('viewprofile','viewwall');//change these to whatever filename 
    $doc = new DOMDocument(); 
    $doc->loadHTML($str); 
    $doc->formatOutput = true; 
    $anchors = $doc->getElementsByTagName('a'); 
    foreach($anchors as $anchor) 
    { 
    $anchor->setAttribute('onclick','#'); 
     if(contains_bad_urls($anchor->getAttribute('href'),$allow_urls)) 
     { 
      $anchor->setAttribute('href', '#'); 
     } 
    } 
    $ret=$doc->saveHTML(); 
    return $ret 
} 
함께했다
관련 문제