Specifieke occurance van in een lange string vervangen.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Alex Hakkenberg

Alex Hakkenberg

17/01/2012 20:46:49
Quote Anchor link
Goedenavond,

Ik heb een probleem waar ik nu al twee dagen mijn hoofd over breek.
Ben geen top PHPer en dat zeg ik maar even voorruit.

Ik heb altijd (voor mij) moeilijke zaken vermeden en makkelijkere oplossingen gezocht. Maar goedkoop is duurkoop en gemakkelijke oplossingen worden het vaak toch niet...

Nu merk ik dat hoe meer ik het probeer het steeds beter gaat.
Maar nu wil ik het volgende.

Ik lees een HTML bestand in.
$html = file_get_contents('html.txt');

Vervolgens lees ik alle afbeeldingen uit:

$dom = new DOMDocument();
$dom->loadHtml($html);
foreach ($dom->getElementsByTagName('img') as $img) {
echo $afbeelding = $img->getAttribute('src');
}


(nee ik heb de code niet zelf geschreven. Maar wel aangepast en geprobeerd tot ik een ons woog)

De code geeft nu een hele lijst weer met alle afbeeldingen.

Nu krijg ik het ook nog voor elkaar om met de bovenstaande functie de titel & de alt tag + width, height, style, class & id op te halen.

Maar wat ik specifiek wil maken is een script om de ALT + TITLE te wijzigen en dat het script deze weer terug zet in de HTML text.

Dit lijkt mij bijna onmogelijk omdat de ene keer de alt weer voor de src staat en de andere keer achter...

En daarbij kan een plaatje twee keer voorkomen. Dus dan vervangt hij hem twee keer.

En ik wil graag dat als ik de tweede wil vervangen dat hij ook alleen de tweede vervangt. En niet alleen de eerste zoals ook mogelijk is met preg_replace en dan 1 aan het eind. Maar ik wil kiezen specifiek de eerste, tweede of derde.

Weet iemand hoe ik dit kan doen??

BV super bedankt!!
 
PHP hulp

PHP hulp

25/11/2024 00:05:27
 
Noppes Homeland

Noppes Homeland

17/01/2012 20:54:29
Quote Anchor link
$html = file_get_contents('html.txt');

Waarom rip jij contents?

Als je het eigen pagina is, zal je het toch op een veel gemakkelijkere manier kunnen aanpakken.
 
Jelmer -

Jelmer -

17/01/2012 20:56:42
Quote Anchor link
DOMElement heeft ook setAttribute(). Je laadt de pagina in $dom, waar dan intern het hele document netjes uitgewerkt als een boom in het geheugen zit. Vervolgens loop je met je foreach-lusje (of $dom->getElemen..()->item(2) voor één specifiek item) naar de juiste node toe, pas je hem aan via setAttribute, en gebruik je $dom->saveHTML() om hem weer om te zetten in platte html.
 
Aad B

Aad B

17/01/2012 21:11:01
Quote Anchor link
Noppes Homeland op 17/01/2012 20:54:29:
Waarom rip jij contents?
Klinkt erg negatief, moet dat? TS leest misschien ergens een pagina voor eigen gebruik en leest alleen regel 10 graag?? Ik doe dat om de 5 min met beurskoersen en zet die in mijn eigen database die niemand verder ziet...
Ik bewaar wat ik gezien voor mezelf, moet kunnen toch?
Edit:
Bovenstaande overigens niet met php maar met plsql
Gewijzigd op 17/01/2012 21:16:47 door Aad B
 
Alex Hakkenberg

Alex Hakkenberg

17/01/2012 21:51:29
Quote Anchor link
Noppes Homeland op 17/01/2012 20:54:29:
$html = file_get_contents('html.txt');

Waarom rip jij contents?

Als je het eigen pagina is, zal je het toch op een veel gemakkelijkere manier kunnen aanpakken.


Ik doe dit omdat ik het niet gelijk wil inbouwen en mijn hele systeem overhoop gooien.
Heb een apart mapje test en daarin allerlei kleine submapjes met elk een scriptje en een gebruiksvoorbeeld. Opdat als ik iets bouw ik veel kant en klare snippets heb.

Daarom ga ik geen complete database koppelen als dat niet nodig is.

Jelmer rrrr op 17/01/2012 20:56:42:
DOMElement heeft ook setAttribute(). Je laadt de pagina in $dom, waar dan intern het hele document netjes uitgewerkt als een boom in het geheugen zit. Vervolgens loop je met je foreach-lusje (of $dom->getElemen..()->item(2) voor één specifiek item) naar de juiste node toe, pas je hem aan via setAttribute, en gebruik je $dom->saveHTML() om hem weer om te zetten in platte html.


Dit klinkt erg gaaf en erg interessant!! Ga ik direct proberen!! Bedankt!!

Toevoeging op 17/01/2012 23:01:09:

Nou weer terug naar een basic vraag. Nu wil ik dus alle items in een array eruitgooien.
Maar dat vertikt ie?

Wat doe ik fout bij de foreach?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$html
= file_get_contents('html.txt');
$doc=new DOMDocument();
$doc->loadHTML($html);
$xml=simplexml_import_dom($doc);

foreach ($xml as $key => $value){
    echo "<br />".$value;
}

?>
 

18/01/2012 20:36:51
Quote Anchor link
Ik zou het $value er nieteens inzetten..

gewoon zo doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$html
= file_get_contents('html.txt');
$doc=new DOMDocument();
$doc->loadHTML($html);
$xml=simplexml_import_dom($doc);

foreach ($xml as $value){
    echo "<br />".$value;
}

?>
 
Alex Hakkenberg

Alex Hakkenberg

18/01/2012 20:56:06
Quote Anchor link
HET WERKT!!!

IEDEREEN BEDANKT!!!!!

DANK JULLIE WEL!!

Inlezen zoals de vorige post hierboven werkt!!
Dan weer hetzelfde soort loopje om alles weer in elkaar te zetten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$html
= file_get_contents('html.txt');
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

$imgs = $xpath->evaluate("/html/body//img");

$num = $imgs->length;

for ($i = 0; $i < $num; $i++) {
    $img = $imgs->item($i);
    $afb = $img->getAttribute('img');

    $img->removeAttribute('title');
    $img->setAttribute("title", "TESTTITEL");

    $img->removeAttribute('img');
}


$html=$dom->saveHTML();

echo $html;
?>



P.S. het copy & paste werk en veel zoeken en proberen en langzaam leren loont!!
Bedankt!!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.