Замените изображения их атрибутом alt PHP

avatar
John
7 апреля 2018 в 22:24
48
1
0

Это код HTML:

<div class="comment-content" contenteditable="true">
     Hello all<br/>
    <img alt="????" class="emojioneemoji" src="https://cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/png/1f602.png">
    <img alt="????" class="emojioneemoji" src="https://cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/png/1f602.png">
    <img alt="????" class="emojioneemoji" src="https://cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/png/1f602.png">
</div>

Я хочу, чтобы код PHP выполнял поиск контента, если он содержит изображения, и заменял изображения атрибутом alt.

Я хочу, чтобы вывод был:

<div class="comment-content" contenteditable="true">
     Hello all<br/>
    ????
    ????
    ????
</div>

Я пытаюсь сделать это с помощью регулярных выражений, и это мой код, но он не работает:

preg_replace('/<img.*?alt="(.*?)"[^\>]+>/g', '$1', $comment_content)

Очень признателен любому гиду.

Спасибо.

Источник
Spoody
7 апреля 2018 в 22:45
0

Делитесь своими исследованиями, это помогает всем. Расскажите нам, что вы пробовали и почему это не удовлетворило ваши потребности. Это показывает, что вы нашли время, чтобы попытаться помочь себе, это избавляет нас от повторения очевидных ответов, и, прежде всего, это помогает вам получить более конкретный и актуальный ответ! См. также: Как спросить

John
7 апреля 2018 в 22:52
0

@MehdiBounya Мне жаль, что я отредактировал вопрос, надеюсь, вы сможете мне помочь.

Cobra_Fast
7 апреля 2018 в 22:54
1

coderhelper.com/a/1732454/522479, secure.php.net/manual/en/class.domdocument.php

Spoody
7 апреля 2018 в 22:56
0

У меня это сработало, удалив g из регулярного выражения, но учтите комментарий @Cobra_Fast

John
7 апреля 2018 в 23:01
0

@MehdiBounya Да, я забыл удалить g, извините.

John
7 апреля 2018 в 23:09
0

@Cobra_Fast Я хочу задать вам вопрос, чтобы понять больше. Я знаю, что использование DOMDocument лучше, но использование Regex в моем случае - это что-то плохое? если да то почему?

Ответы (1)

avatar
ankabot
7 апреля 2018 в 23:02
1
<?php
$html = '<div class="comment-content" contenteditable="true">
     Hello all<br/>
    <img alt="????" class="emojioneemoji" src="https://cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/png/1f602.png">
    <img alt="????" class="emojioneemoji" src="https://cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/png/1f602.png">
    <img alt="????" class="emojioneemoji" src="https://cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/png/1f602.png">
</div>';
$dom = new DOMDocument();
$dom->loadHTML('<html><head><meta charset="utf-8"></head><body>' . $html . '</body></html>');
while ($dom->getElementsByTagName('img')->length) {
    $oldnode = $dom->getElementsByTagName('img')[0];
    $newnode = $dom->createTextNode($oldnode->getAttribute('alt'));
    $oldnode->parentNode->replaceChild($newnode, $oldnode);
}

header('Content-Type: text/html; charset= UTF-8');
echo $dom->saveHTML($dom->getElementsByTagName('div')[0]);
John
7 апреля 2018 в 23:16
0

Спасибо, но почему бы не использовать $dom->saveHTML() или $dom->saveHTML($dom->documentElement)) напрямую?

ankabot
7 апреля 2018 в 23:27
0

Привет, я использовал его, чтобы показать только содержимое элемента div, если я использовал $dom->saveHTML(), он покажет содержимое div, завернутое в код, который я добавил, когда загружал HTML, и добавил какой-то другой код. самим классом.

ankabot
7 апреля 2018 в 23:30
0

Также я обернул ваш HTML-код кодом <html><head><meta charset="utf-8"></head> и т. д., чтобы класс обрабатывал HTML в кодировке UTF-8, это решение, которое я нашел, выполнив поиск в Stackoverflow, иначе, как они сказали, HTML будет обрабатываться в ISO-8859- 1 кодировка.