2013-01-07 95 views
0

我有一個關於PHP修剪功能的問題。 考慮以下內容:php修剪功能修剪額外的小於/大於符號

$x= '<p>blah</p>'; 
$x= trim(trim($x, '<p>'), '</p>'); 
echo htmlentities($x) . "<br />"; 

This works as expected and prints blah 

$x= '<p><b>blah</b></p>'; 
$x= trim(trim($x, '<p>'), '</p>'); 
echo htmlentities($x) . "<br />"; 

This prints b>blah</b 

我不想尋找其他方法來解決這個問題。
我不知道爲什麼修剪功能顯示此行爲(剝離額外的小於/大於符號)。

在此先感謝。

+0

你看着'strip_tags'?您可以指定不應刪除的標籤白名單。 – Halcyon

+0

請參閱:http://us3.php.net/manual/en/function.trim.php#refsect1-function.trim-parameters –

回答

2

trim將第二個參數視爲可以刪除的字符列表,而不是連續的字符串。這解釋了爲什麼b仍然存在,但刪除了<>

+0

感謝您的解釋。我認爲這是一個連續的字符串。 – user1955274

0

這是trim函數的默認行爲。你期望它修剪確切的字符串,但第二個參數是一個字符列表,如果在字符串的每一邊都找到它們,它們中的任何一個都將被修剪。

你可以使用簡單的regex這樣的:

$x = preg_replace(array('#^<p>#i', '#</p>$#i'), '', $x); 
+0

爲什麼要用'str_replace()'可以做的東西使用正則表達式? –

+0

@crypticツ因爲在字符串的開始和結尾*處替換*所有出現的*和*一個事件是不同的事情。 – Ranty