2012-05-16 63 views
-2

我有一個示例代碼HTML:錯誤時str_replace函數在HTML代碼

$text = '<img src="abc.jpg" alt="abc" /> abc def ghi abc xyz'; 
echo str_replace('abc', 'has replace', $text); 

當我回聲結果是標籤<img/>已更換「abc」到「has replace」 =>錯誤

如何時運行結果是:

<img src="abc.jpg" alt="abc" /> has replace def ghi has replace xyz 
+0

[preg_replace函數可能重複只能在外面的標籤? (...我們不是說全'HTML解析',只是一點點降價)](http://stackoverflow.com/questions/4603780/preg-replace-only-outside-tags-were-not-talking - 滿HTML的解析,強制) – mario

回答

1

我有一個想法:

$k=0; 
$arr = array(); 
$regex = '/(<img.*?\/>)/ism'; 
if(preg_match_all($regex, $text, $tmp)) { 
    if(isset($tmp[0])) {    
     for($i = 0;$i < count($tmp[0]); $i++) { 
     $arr[0][$k] = $tmp[0][$i]; 
     $arr[1][$k] = md5($tmp[0][$i]); 
     $text = str_replace($arr[0][$k], $arr[1][$k], $text); 
     $k++; 
     } 
    } 
} 

然後你就可以更換:

echo str_replace('abc', 'has replace', $text); 

結果現在是: $文字= '74d3ae3af91872413da1db45d88ddd4a ABC DEF GHI ABC XYZ'; // IMG一直MD5

最後,您可以:

for($i = 0;$i < $k; $i++) { 
    $text = str_replace($arr[1][$i], $arr[0][$i], $text); 
} 

希望你會成功的