일부 HTML을 가져와 img 태그를 제거하고 html (sans 이미지)을 반환하는 함수를 작성해야합니다. 그러나 imgs (배열에)를 유지해야 페이지를 개별적으로 출력 할 수 있습니다.HTML에서 img 태그를 제거하고 html과 이미지를 배열로 반환합니다.
저는 거의 모든 PHP를 알고 있으므로 이것을 수행하는 가장 좋은 방법은 무엇입니까?
일부 HTML을 가져와 img 태그를 제거하고 html (sans 이미지)을 반환하는 함수를 작성해야합니다. 그러나 imgs (배열에)를 유지해야 페이지를 개별적으로 출력 할 수 있습니다.HTML에서 img 태그를 제거하고 html과 이미지를 배열로 반환합니다.
저는 거의 모든 PHP를 알고 있으므로 이것을 수행하는 가장 좋은 방법은 무엇입니까?
DOMDocument class에 익숙해 져야합니다. 이를 수행하는 가장 좋은 방법은 DOMDocument
을 사용하여 HTML을 구문 분석하고 getElementsByTagName('img')
을 사용하여 모든 <img>
태그를 찾으십시오. 이미지의 src
속성이면 DOMDocument가 해당 속성을 반환하고 배열에 저장할 수 있습니다. 모든 이미지는 루트 문서의 직접 아이들이있는 경우
// HTML already parsed into $dom
$imgs = $dom->getElementsByTagName('img');
$img_src = array();
// Array of nodes to remove.
$to_remove = array();
foreach ($imgs as $img) {
// Store the img src
$img_src[] = $img->getAttribute('src');
// Delete the node (I think this works)
$to_remove[] = $img;
}
// Then remove all the nodes slated for deletion:
foreach ($to_remove as $node) {
$dom->removeChild($img);
}
<?php
$pattern = '/<img[^>]*src="([^"]*)[^>]*>/i';
preg_match_all($pattern, $data, $matches);
// image src array
$images = $matches[1];
// no images
$html = preg_replace($pattern, '', $data);
?>
허용 대답에만 작동합니다. 중첩 된 문서의 경우 this answer을 사용하는 것이 좋습니다.
꽤 흥미로운 내용입니다. 장래의 독서를 위해 북마크했습니다. 내가 작업하고있는 HTML은 함수에 의해 리턴됩니다. – hamishtaplin
@dr_tchock DOMDocument :: loadHTML()은 파일이 아닌 문자열에서 HTML을로드하며, 함수가 문자열을 반환하면 작동 할 수도 있습니다. http://www.php.net/manual/en/domdocument.loadhtml.php –
루프 내에서 해당 배열을 반복하는 동안 배열에서 항목을 제거하지 마십시오. – lovesh