2013-09-26 92 views
0
$find = '{<p>something</p>}'; 
$str1 = "<p>{<p>something</p>}</p>\r\ntext<p>something else</p>"; 
// or 
$str2 = "<p>something</p>\r\n{<p>something</p>}aa<p>t</p>\r\ntext<p>something else</p>"; 

基本上,$ find可以在字符串中的任何位置。新行分隔符是「\ r \ n」。如何從字符串中刪除特定的html標籤?

我需要在$ str中找到$ find,並在$特定字符串行的$ find附近刪除特定的html標籤。不應該從$ find中刪除標籤。

預計產出將是

// For $str1 
$str1 = "{<p>something</p>}\r\ntext<p>something else</p>"; 
// For $str2 
$str2 = "<p>something</p>\r\n{<p>something</p>}aat\r\ntext<p>something else</p>"; 

的字符串可能會很長,所以沒有正則表達式的解決方案吧。

我想通了:

$pos = strpos($str, $find); 
if ($pos !== false) { 
    $contentLength = strlen($str); 
    $lineStart = (int)strrpos($str, "\r\n", -$contentLength+$pos); // cast false to 0 (start of string) 
    $lineEnd = strpos($str, "\r\n", $pos); 
    if ($lineEnd === false) 
     $lineEnd = strlen($str); 

    $lineLength = $lineEnd-$lineStart; 
    if ($lineLength < 0) 
     return; 

    var_dump(substr($str, $lineStart, $lineLength)); 
} 

的轉儲字符串中的特定行。

+0

你可以給試圖代碼? –

回答

0

我的最終解決方案:

function replace($find, $str, $replace) { 
    $pos = strpos($str, $find); 
    if ($pos !== false) { 
     $delim = "\r\n"; 
     $contentLength = strlen($str); 

     $lineStart = strrpos($str, $delim, -$contentLength+$pos); 
     if ($lineStart === false) 
      $lineStart = 0; 
     else 
      $lineStart += strlen($delim); 

     $lineEnd = strpos($str, $delim, $pos); 
     if ($lineEnd === false) 
      $lineEnd = strlen($str); 

     $lineLength = $lineEnd - $lineStart;  

     $line = substr($str, $lineStart, $lineLength); 
     $posLine = strpos($line, $find); // Where $find starts 
     $findLength = strlen($find); 

     $line = substr_replace($line, '', $posLine, $findLength); // Remove $find from $line 
     $begin = replaceTags(substr($line, 0, $posLine)); 
     $end = replaceTags(substr($line, $posLine)); 

     return substr_replace($str, $begin.$replace.$end, $lineStart, $lineLength); 
    } 
} 
function replaceTags($str) { 
    return str_replace(array('<p>', '</p>'), '', $str); 
} 
echo replace($find, $str, $replace); 
相關問題