2013-09-25 1 views
0

웹에서 특정 페이지를 제거하는 프로그램이 있습니다. 그런 다음 나머지 페이지를 가로 지르고 제거 된 페이지에 대한 링크를 "링크 해제"하고 싶습니다. 나는 simplehtmldom을 사용하고있다. 내 함수는 소스 페이지 ($ source)와 페이지 배열 ($ skipList)을 취한다. 그것은 링크를 발견하고, 그때 요소를 $ link-> innertext로 변환하기 위해 dom을 조작하고 싶습니다. 그러나 나는 어떻게 해야할지 모르겠습니다. 어떤 도움이 필요합니까?일반 텍스트로 링크를 PHP로 대체 html dom

function RemoveSpecificLinks($source, $skipList) { 
    // $source is the html source file; 
    // $skipList is an array of link destinations (hrefs) that we want unlinked 
$docHtml = file_get_contents($source); 
$htmlObj = str_get_html($docHtml); 
$links = $htmlObj->find('a'); 
if (isset($links)) { 
    foreach ($links as $link) { 
     if (in_array($link->href, $skipList)) { 
      $link->href = ''; // Should convert to simple text element 
     } 
    } 
} 
$docHtml = $htmlObj->save(); 
$htmlObj->clear(); 
unset($htmlObj); 
return($docHtml); 
} 

답변

1

내가 simplehtmldom을 사용한 적이 있지만, 내가 당신의 문제를 해결해야한다고 생각 것입니다 : 이것은 또한 일을하는 방법을 지정, 근무 여부 것처럼 경우

function RemoveSpecificLinks($source, $skipList) { 
    // $source is the HTML source file; 
    // $skipList is an array of link destinations (hrefs) that we want unlinked 
$docHtml = file_get_contents($source); 
$htmlObj = str_get_html($docHtml); 
$links = $htmlObj->find('a'); 
if (isset($links)) { 
    foreach ($links as $link) { 
     if (in_array($link->href, $skipList)) { 

      $link->outertext = $link->plaintext; // THIS SHOULD WORK 

      // IF THIS DOES NOT WORK TRY: 
      // $link->outertext = $link->innertext; 
     } 
    } 
} 
$docHtml = $htmlObj->save(); 
$htmlObj->clear(); 
unset($htmlObj); 
return($docHtml); 
} 

이 나에게 어떤 피드백을 제공하세요 어떤.

업데이트 : 아마 당신이 선호 :

$link->outertext = $link->href; 

이 당신이 표시된 링크를 얻을 방법이 있지만, 클릭 할 수 있습니다.

+0

감사합니다. 나는 innertext로 갔다. 링크의 텍스트에 html 형식을 유지하지만 plaintext, innertext 또는 href는 모두 작동한다. 내가 그 생각을하지 않으려 고하는 그런 명확한 해결책. 다시 한 번 감사드립니다 ... –

+0

문제 없습니다. 다행히 도울 수있다. :-) – George