Ik ben bezig om bepaalde soorten tags om te zetten.
Tot nu toe heb ik de volgende code:


$html = 'blabla <video controls="controls" width="300" height="150">
<source src="media/07092012_psvbabys.mp4" type="video/mp4" /></video><p><b>stuff</b></p><span>more <span class="foo">and <b>even bold mag</b>< more</span> stuff here</span><img src=\"smilies/smilyOne.png\">';

// prima
$html = strip_tags($html, "<img><b>"); 
$dom = new DOMDocument;
$dom->loadHTML($html);

// prima
// iterate through all the img elements in $html
foreach ($dom->getElementsByTagName('img') as $img) {


if($img->hasAttribute('src'))
    {
    $dom = str_replace($img, $img->getAttribute('src'));
    }
}
print_r($html);


Ik wil ipv de afbeelding alleen de link naar de bron (src) zien. Maar op een of andere manier krijg ik toch een afbeelding te zien op het scherm.
Wat doe ik verkeerd?
Hi Daan,

Zou je dit niet beter met een preg_match kunnen oplossen?

<?php
$html = 'blablalbla <video controls="controls" width="300" height="150"><source src="media/07092012_psvbabys.mp4" type="video/mp4" /></video><p><b>stuff</b></p><span>more<span class="foo">and<b>even bold mag</b>more</span>stuff here</span><img src="smilies/smilyOne.png"><img src="smilieddds/smilyOne.png">';

preg_match_all('/< *img[^>]*src *= *["\']?([^"|\']*)/', $html, $matches);

print_r($matches[1]);
?>

Het gebruik van de DOM class van PHP is misschien wat complex. Mocht je toch de DOM willen gebruiken, dan dien je de DOM wel te saven.
De code die je nu hanteert is mij niet helemaal duidelijk, dus inhoudelijk exact aangeven wat er fout gaat is moeilijk.

Groet,

Max

Hi Max, thanks!
Dat is wat moet gebeuren... alleen de rest moet ook nog worden weergegeven.

Dus wat ik wil van de $html:
alle codes omzetten in platte tekst, behalve <B> en <IMG>. Als er een <IMG> gevonden wordt, moet daarvan alleen de link worden weergegeven.
Hoi Daan,

Moeten de tags worden omgezet naar platte tekst? (as in htmlentities())? Of bedoel je dat de tags eruit gefilterd moeten worden en je alleen de tekst overhoudt + de link van de afbeelding?
Dat laatste inderdaad, je moet alleen de tekst overhouden + de link van de afbeelding.
Ik ben een beginner met php dus wat ik zeg zal wel niet kloppen maar wil het toch melden. Ik zie niet iets aan de uiteindelijke $html dat een link zou moeten zijn. Misschien $html in een a href stoppen (het gedeelte van de link dus, niet de tekst zelf)? $html extra opsplitsen?


<?php
preg_match('(<img.+?src=[\"\'](.+?)[\"\'].*?>)', $html, $matches);

if( count( $matches ) > 0 )
{
    $html = str_replace($matches[0], $matches[1],$html);
}

$html = strip_tags($html, "<b>"); 

print $html;


Hier doe ik het dus eigenlijk omgekeerd van wat jij doet (eerst replacen en dan pas tags strippen). Dan weet je zeker dat ze er daarna altijd uit zijn, ook als iets fout gaat.
Dankjewel Max! Het werk!
Nog een klein vraagje:
Hoe kan ik teksten die BOLD zijn ROOD gekleurd maken?

Het is inderdaad bijna dezelfde topic, maar ik had wat elementen omgewisseld...
Je kan dit in CSS stylen:


b, strong {
 color: red;
}

Reageren