我有一個樣品字符串如下:PHP DOM文檔的文本節點替換多個孩子
$feed_status = "Nice to see you all back again <img src=\"http://52.1.47.143/file/pic/emoticon/default/smile.png\" alt=\"Smile\" title=\"Smile\" title=\"v_middle\" /><img src=\"http://52.1.47.143/file/pic/emoticon/default/smile.png\" alt=\"Smile\" title=\"Smile\" title=\"v_middle\" /><img src=\"http://52.1.47.143/file/pic/emoticon/default/smile.png\" alt=\"Smile\" title=\"Smile\" title=\"v_middle\" />";
(請原諒我的語法錯誤,如單引號和雙引號的放置)
供您參考我我剛剛在字符串中添加了三個<img>
標記,但在實際情況下,此字符串可能包含單個<img>
標記或不包含<img>
標記或多個<img>
標記。
我想獲取每個<img>
標記的src屬性中存在的文件的名稱並創建這些文件名的數組。然後,我必須用標題爲$emoticon_codes
的數組中的字符串替換這些<img>
標記,該數組是根據<img>
標記中存在的文件名動態創建的。應該發生的字符串替換是相同的順序。
爲此我試了下面的代碼。直到創建動態數組標題爲$emoticon_codes
一切都很好,但我面臨的代碼是用數組$emoticon_codes
中的字符串替換當前的<img>
標籤。那麼請有人可以幫我糾正我在代碼中犯的錯誤,同時替換字符串中的<img>
標籤。
以下是我的代碼:
$doc = new DOMDocument();
$doc->loadHTML($feed_status);
$imageTags = $doc->getElementsByTagName('img');
if(count($imageTags)) {
$emoticon_codes = array();
foreach($imageTags as $tag) {
if (basename($tag->getAttribute('src')) == 'evilgrin.png') {
array_push($emoticon_codes, '\ue404');
}
if (basename($tag->getAttribute('src')) == 'grin.png') {
array_push($emoticon_codes, '\ue415');
}
if (basename($tag->getAttribute('src')) == 'happy.png') {
array_push($emoticon_codes, '\ue057');
}
if (basename($tag->getAttribute('src')) == 'smile.png') {
array_push($emoticon_codes, '\ue056');
}
if (basename($tag->getAttribute('src')) == 'surprised.png') {
array_push($emoticon_codes, '\ue107');
}
if (basename($tag->getAttribute('src')) == 'tongue.png') {
array_push($emoticon_codes, '\ue105');
}
if (basename($tag->getAttribute('src')) == 'unhappy.png') {
array_push($emoticon_codes, '\ue403');
}
if (basename($tag->getAttribute('src')) == 'waii.png') {
array_push($emoticon_codes, '\ue407');
}
if (basename($tag->getAttribute('src')) == 'wink.png') {
array_push($emoticon_codes, '\ue405');
}
}
/*Till here everything works fine. The array $emoticon_codes is also getting generated finely*/
/*Following is the code giving problem to me,*/
$t = 0;
foreach($imageTags as $img) {
$img->parentNode->replaceChild($img, $doc->createTextNode($emoticon_codes[$t]));
$t++;
if ($t > count($emoticon_codes)) {
break;
}
}
}
我想要的輸出字符串應該像如下echo $feed_status;
後:
$ feed_status =很高興回來\ ue056看你所有\ ue056 \ ue056 ;
在此先感謝。
非常感謝您的巨大幫助。它爲我工作得很好。再次感謝我的心底。 – user2839497 2015-04-02 05:59:08
@ user2839497確定我很高興這有幫助 – Ghost 2015-04-02 06:05:37