[PHP] 輸出摘要部落格內容時,因標籤不完整關閉而讓版面錯亂的解法

Standard

之前處理某個社群網站部落格的程式時,遇到一個惱人的問題。由於我們為了閱讀方便,並不會將整篇文章在文章彙整模式列出,而是將部分文章內容取出。
好了,你會怎麼作?一般來說,最直覺的是使用 mb_substr() 將欄位內容取出,但萬一使用者寫的這篇內容包含了表格 (table) 會怎樣呢?(無論他是有意還是無意)剛好截到某個 td 標籤的一半,那整個版面可能就這樣亂掉了。
當然把標籤去掉再輸出也是個作法,但這樣並不是個好解法。

當時 Google 到了一個不錯的方案,就是 php 的 tidy 套件。
但似乎並無內建,需自己手動安裝一下。安裝在此就不贅述了。

記錄一下用法:

<?php
  $html = "<b>aaa</i>aaaaaa<h1>aaaaaa</h5><h2>";
  $configs = array('indent' => TRUE,           // 這是讓 HTML 標籤以縮排漂亮地排列
                   'show-body-only' => TRUE,   // 不要輸出包含 <html> 的完整結構,單單輸出我們要的部分就好
                   'wrap' => 200);             // 字串寬度
  // 詳細設定請參考 http://tidy.sourceforge.net/docs/quickref.html

  $tidy = tidy_parse_string($html, $configs, 'UTF8');
  echo $tidy;
  echo "<pre>";
  print_r($tidy->getConfig());
  echo "</pre>";
?>

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *