Я один пример строки следующим образом:PHP DOMDocument заменить несколько ребенка с текстовыми узлами
$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\" />";
(Прости меня за синтаксических ошибок, как размещение одиночных и двойные кавычки)
Для справки I 'только что добавили три тега <img>
, но в реальной ситуации эта строка может содержать один тег <img>
или не тег <img>
или более одного знака <img>
.
Я хочу получить имена файлов, присутствующих в каждом атрибуте src тега <img>
, и создать массив этих имен файлов. Затем я должен заменить теги <img>
строками из массива под названием $emoticon_codes
, который создается динамически на основе имени файла, присутствующего в теге <img>
. Такая замена строк должна происходить в том же порядке.
Для этого я пробовал следующий код. До создания динамического массива под названием $emoticon_codes
все работает отлично, но я столкнулся с кодом для замены текущих тегов <img>
строками из массива $emoticon_codes
. Так может кто-нибудь, пожалуйста, помогите мне в исправлении ошибки, которую я делаю в своем коде, заменяя теги <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
@ user2839497 уверен, что я рад, что это помогло – Ghost