2010-07-07 72 views
1

我使用PHP函數將文本拆分爲最多N個字符的塊。 一旦每個模塊以某種方式被「處理」,它就會再次連接在一起。 問題是,文本可以是HTML ...,如果在開放的HTML標籤之間發生分裂,「治療」會變壞。 有人可以提供關於僅在封閉標籤之間破解文本的提示嗎?在不打破「打開」標記的情況下拆分html文本

要求:

  • 最大塊長度:N
  • 有NO <body>標籤
  • 有NO <HTML>標籤
  • 有NO <head>標籤

添加樣品:(最大塊長度= 173)

<div class="myclass"> 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer dapibus sagittis lacus quis cursus. 
</div> 
<div class="anotherclass"> 
Nulla ligula felis, adipiscing ac varius et, sollicitudin eu lorem. Sed laoreet porttitor est, sit amet vestibulum massa pretium et. In interdum auctor nulla, ac elementum ligula aliquam eget 
</div> 

在上面的文本中,給定173個字符作爲限制,文本將打破@「adipiscing」,但是這會破壞<div class="anotherclass">。在這種情況下,分割應該在第一次收盤時發生,儘管最大限度較短。

+0

舉例說明當前輸出和所需的輸出將會有所幫助 – 2010-07-07 13:02:45

+0

我已經添加了一個示例! – Riccardo 2010-07-07 13:23:19

回答

1

「正確的」方法是解析HTML並在其文本節點上執行縮短操作。在PHP5中,您可以使用DOM extension,特別是DOMDocument::loadHTML()

+0

您必須確保使用此工具正確編碼標籤?如果標籤被寵壞了怎麼辦? – Riccardo 2010-07-07 13:57:23

+0

「與加載XML不同,HTML不必格式化才能加載。」 - 結果可能是意想不到的,但它應該至少可以解析它。同樣來自'loadHTML'手冊頁:「DOMDocument非常善於處理不完善的標記,但它在整個過程中都會拋出警告。」 – You 2010-07-07 14:09:19

+0

@Riccardo DOM即使無效也可以加載HTML。您將無法使用getElementById,但其他所有功能都可以使用。如果DOM拋出有關標記的警告,則可以啓用自定義錯誤處理並清除錯誤。見http://kore-nordmann.de/blog/0081_parse_html_extract_data_from_html.html – Gordon 2010-07-07 16:51:38

0

嗯我已經使用了一個代碼,我不得不分裂由所見即所得輸入的副本,並想從中檢索第一段。它的小狡猾,但爲我做了伎倆。 如果你想添加show「n」,那麼你可以使用substr將它添加到「intro」var。 希望這會讓你開始: - |

function break_html_description_to_chunks($description = null) 
{ 
    $firstParaEnd = strpos($description,"</p>"); 
    $firstParaEnd += 4; 
    $intro = substr($description, 0, $firstParaEnd); 

    $body = substr($description, $firstParaEnd, strlen($description)); 
    $temp = array("intro" => $intro, "body" => $body); 
    return $temp; 
} 
+0

謝謝..........! – Riccardo 2010-07-07 16:17:23

相關問題