Làm cách nào để lấy văn bản từ chuỗi HTML trong PHP?

Đây là hướng dẫn PHP về cách trích xuất tất cả các liên kết và văn bản liên kết của chúng từ một chuỗi HTML. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách tìm nạp nội dung HTML của một trang web và sau đó trích xuất các liên kết từ đó. Để làm điều này, chúng tôi sẽ sử dụng lớp DOMDocument của PHP

Hãy bắt đầu ngay và xem một ví dụ đơn giản

//Get the page's HTML source using file_get_contents.
$html = file_get_contents['//en.wikipedia.org'];

//Instantiate the DOMDocument class.
$htmlDom = new DOMDocument;

//Parse the HTML of the page using DOMDocument::loadHTML
@$htmlDom->loadHTML[$html];

//Extract the links from the HTML.
$links = $htmlDom->getElementsByTagName['a'];

//Array that will contain our extracted links.
$extractedLinks = array[];

//Loop through the DOMNodeList.
//We can do this because the DOMNodeList object is traversable.
foreach[$links as $link]{

    //Get the link text.
    $linkText = $link->nodeValue;
    //Get the link in the href attribute.
    $linkHref = $link->getAttribute['href'];

    //If the link is empty, skip it and don't
    //add it to our $extractedLinks array
    if[strlen[trim[$linkHref]] == 0]{
        continue;
    }

    //Skip if it is a hashtag / anchor link.
    if[$linkHref[0] == '#']{
        continue;
    }

    //Add the link to our $extractedLinks array.
    $extractedLinks[] = array[
        'text' => $linkText,
        'href' => $linkHref
    ];

}

//var_dump the array for example purposes
var_dump[$extractedLinks];

Trong đoạn mã trên

  1. Chúng tôi đã gửi một yêu cầu GET tới một trang web nhất định bằng hàm file_get_contents của PHP. Hàm này sẽ trả về nguồn HTML của URL dưới dạng chuỗi
  2. Chúng tôi đã khởi tạo lớp DOMDocument
  3. Để tải chuỗi HTML vào đối tượng DOMDocument mới tạo của chúng tôi, chúng tôi đã sử dụng DOMDocument. hàm tảiHTML
  4. After that, we used the getElementsByTagName function to search our HTML for all “a” elements. As I’m sure you already know, the tag is used to define a hyperlink. Note that this function will return a traversable DOMNodeList object.
  5. Chúng tôi đã tạo một mảng trống có tên là $extractedLinks, mảng này sẽ được sử dụng để đóng gói gọn gàng tất cả các liên kết đã truy xuất của chúng tôi
  6. Because the DOMNodeList object is traversable, we are able to loop through each tag using a foreach loop.
  7. Trong vòng lặp foreach của chúng tôi, chúng tôi đã truy xuất văn bản liên kết bằng thuộc tính nodeValue. Để truy xuất chính liên kết thực tế, chúng tôi đã sử dụng hàm getAttribute để truy xuất thuộc tính href HTML
  8. Nếu liên kết trống hoặc bắt đầu bằng thẻ bắt đầu bằng dấu thăng / liên kết neo, chúng tôi bỏ qua liên kết đó bằng cách sử dụng câu lệnh tiếp tục
  9. Cuối cùng, chúng tôi lưu trữ các chi tiết của liên kết trong mảng $extractedLinks của chúng tôi

Nếu bạn chạy PHP ở trên, tập lệnh sẽ loại bỏ một loạt tất cả các liên kết được tìm thấy trên trang chủ Wikipedia. Lưu ý rằng các liên kết này có thể là tương đối hoặc tuyệt đối

Hàm preg_match[] là tùy chọn tốt nhất để trích xuất văn bản giữa các thẻ HTML bằng REGEX trong PHP. Nếu bạn muốn lấy nội dung giữa các thẻ, hãy sử dụng biểu thức chính quy với hàm preg_match[] trong PHP. Bạn cũng có thể trích xuất nội dung bên trong phần tử dựa trên tên lớp hoặc ID bằng PHP

Đoạn mã ví dụ cho biết cách lấy nội dung bên trong div cụ thể [phần tử HTML] bằng cách sử dụng PHP. Đoạn mã sau sử dụng preg_match[] với biểu thức chính quy để trích xuất nội dung văn bản hoặc HTML từ các thẻ bên dưới bằng cách sử dụng PHP

$htmlContent = '

Content goes here...';

preg_match['/

[.*?]/s', $htmlContent, $match];

Trích xuất và trả về nội dung bao gồm phần tử cha [thẻ]

$match[0];

Trích xuất và trả về nội dung giữa các thẻ

$match[1];

Giá trị trả về. Hàm này trả về chuỗi đã chuyển đổi. Nếu có chuỗi đầu vào không hợp lệ thì chuỗi rỗng sẽ được trả về

Thí dụ

Chủ Đề