2014-01-22 29 views
0

我有一個很大的問題。我必須剪下一個由HTML代碼組成的字符串。但我不知道該怎麼做,使HTML代碼不會得到傷害:如何限制字符串不傷害HTML代碼,在PHP?

<p>this is a <strong>HTML</strong> code which is too long, and can be even UNICODE characters</p> 

與mb_substr():

<p>this is a <strong>HTM 

是有辦法解決它呢?

+0

使用切割前字符串'strip_tags'看到http://in2.php.net/strip_tags和使用後'substr' –

+1

它不能以確定的方式來完成。你可以使用像'simple_html_dom'這樣的庫迭代地剪切並檢查更短的字符串是否仍然是有效的HTML。除此之外,你應該首先限制字符串長度,而不是稍後縮短。 :) –

+0

函數'strip_tags'不能使用,因爲他需要「HTML代碼不會被損壞」。 –

回答

1

你必須解析你的字符串。我會用正則表達式來做一個分割,然後剪切字符串(計算沒有標籤的字符),然後再添加closetags。

嘗試後10個字符這個切斷,只適用於第一次出現:

$cut_after = 10; 
$string_complete = "<b>Peter Griffin</b>"; 
$string_to_cut = filter_var($string_complete, FILTER_SANITIZE_STRING); 
var_dump($string_complete); 
//string '<b>Peter Griffin</b>' (length=20) 

$string_chopped_head = substr($string_to_cut, 0, $cut_after); 
$string_chopped_tail = substr($string_to_cut, $cut_after, (strlen($string_to_cut)-$cut_after)); 
$string_head_before_cut = substr($string_complete, 0, stripos($string_complete, $string_chopped_head)); 
$string_tail_after_cut = substr($string_complete, stripos($string_complete, $string_chopped_tail)+strlen($string_chopped_tail)); 

$final_string = $string_head_before_cut . $string_chopped_head . $string_tail_after_cut; 
var_dump($final_string); 
//string '<b>Peter Grif</b>' (length=17) 
1

這些都是你可以用它來解決了工具:substr()找到標籤的位置,strlen($string)計算字符串的長度,以及substr()來獲取字符串的片段。

1

過濾器使用FILTER_SANITIZE_STRING