Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

PHP: (e)regi_replace?

Anoniem
BasHamar
12 antwoorden
  • [code:1:3edad0b19b]<td align=center nowrap><center><span class=toplink><?php print $this->links(link_page()); ?></span></center></td>[/code:1:3edad0b19b]
    Bovenstaand geeft mij een aantal links welke standaard van elkaar zijn gescheiden door een '|'.
    Nu wil ik deze '|' vervangen door een '&middot;', zonder dat ik in 5 bestanden de broncode moet gaan wijzigen.
    Volgens mij kan dit door het $this->links(link_page()) in een eregi_replace() te zetten, alleen hoe ziet dit er dan uit? En welke argumenten moet ik gebruiken?

    Heb al op php.net gekeken, maar daar wordt ik niet veel wijzer van…


    Alvast bedankt!
  • [quote:1abe401644="Stefan Nagtegaal"][code:1:1abe401644]<td align=center nowrap><center><span class=toplink><?php print $this->links(link_page()); ?></span></center></td>[/code:1:1abe401644]
    Bovenstaand geeft mij een aantal links welke standaard van elkaar zijn gescheiden door een '|'.
    Nu wil ik deze '|' vervangen door een '&middot;', zonder dat ik in 5 bestanden de broncode moet gaan wijzigen.
    Volgens mij kan dit door het $this->links(link_page()) in een eregi_replace() te zetten, alleen hoe ziet dit er dan uit? En welke argumenten moet ik gebruiken?

    Heb al op php.net gekeken, maar daar wordt ik niet veel wijzer van…


    Alvast bedankt![/quote:1abe401644]
    Volgens mij ziet er zo uit:
    [code:1:1abe401644]
    print eregi_replace("([|])","&middot;",$this->links(link_page()));
    [/code:1:1abe401644]
    Het werkt in ieder geval met een "gewone" string-variabele, of het met die functie werkt, weet ik niet.
    Anyway, het komt er op neer dat eregi_replace als eerste de string verwacht die je zoekt, tussen () en []. De tweede parameter is de vervangende string, de derde is de string waarin gezocht moet worden.

    Ed
  • nou, dat klopt wel, maar is wel erg overdreven..

    print eregi_replace("|","&middot;",$this->links(link_page()));

    is voldoende, al weet ik niet of | bij ereg een speciale betekenis heeft. waarschijnlijk wel en dan zou je er:

    print eregi_replace("\|","&middot;",$this->links(link_page()));

    van moeten maken. Maar regular expressions zijn voor geavanceerde zoekopdrachten, niet voor het vervangen van 1 simpel karakter. Daar kun je beter str_replace() gebruiken. Dan wordt het dus:

    print str_replace("|", "&middot;", $this->links(link_page()));
  • [quote:0e0306e8cf="Jurriaan R"]Maar regular expressions zijn voor geavanceerde zoekopdrachten, niet voor het vervangen van 1 simpel karakter. Daar kun je beter str_replace() gebruiken.[/quote:0e0306e8cf]FF een klein uitstapje naar andere functies: wat is dan precies het verschil tussen str_replace() en strtr(), waar je exact hetzelde resultaat mee kan krijgen?

    - Basje.
  • bij strtr kan het aantal karakters dat vervangen wordt niet van elkaar verschillen van de vervangterm.

    [quote:b64c226359]Als from en to van verschillende lengte zijn, zullen de extra karakters in de langste van de twee genegeerd worden. [/quote:b64c226359]
  • [quote:4380b158bf="Jurriaan R"]nou, dat klopt wel, maar is wel erg overdreven..
    [/quote:4380b158bf]
    Ik hou wel van een beetje overdrijven :)
    [quote:4380b158bf="Jurriaan R"]
    print eregi_replace("|","&middot;",$this->links(link_page()));

    is voldoende, al weet ik niet of | bij ereg een speciale betekenis heeft. waarschijnlijk wel en dan zou je er:

    print eregi_replace("\|","&middot;",$this->links(link_page()));

    [/quote:4380b158bf]
    Ik had je eerste optie wel geprobeerd, maar dat ging niet goed. De tweede werkt wel. Heb ik ook weer wat geleerd 8)

    Ed
  • Bedankt allen, het werkt…
  • [quote:0c898f4ce6="Jurriaan R"]bij strtr kan het aantal karakters dat vervangen wordt niet van elkaar verschillen van de vervangterm.[/quote:0c898f4ce6]Da's niet waar, aangezien ik het wel degelijk zo gebruik. Als je namelijk een array maakt met keys en values zoals[code:1:0c898f4ce6]$replace_array = array("aap" => "noot", "ufo" => "vliegende schotel");[/code:1:0c898f4ce6]en je geeft deze vervolgens als tweede argument door aan de functie strtr() dan werkt dat prima. Dus blijft mijn vraag: wat is nou precies het verschil?

    - Basje.
  • het verschil is dat die functie met de array pas vanaf php 4.0 is ingevoerd. En dat str_replace niet zo'n array kan ontvangen.

    maar het zijn inderdaad allemaal manieren om een bepaald gedeelte van een tekst te vervangen. Als je meerdere termen wilt vervangen, gebruik je strtr, omdat die functie met de array wel handig is omdat eerder vervangen termen niet meer worden vervangen. Tenzij je dat wel wilt en dan gebruik je meerdere str_replace() statements. Voor het vervangen van 1 enkele term kun je ze allebei gebruiken. Er zijn wel meer functies in php die nagenoeg of precies hetzelfde doen in PHP.
  • Ok, bedankt voor de uitleg. :)

    - Basje.
  • Een groot verschil tussen str_replace() en strtr() als je geen arrays gebruikt is natuurlijk ook dat strtr() geen stringparts vervangt maar karakters.
    Vergelijk bijvoorbeeld:
  • aha, dat wist ik ook niet.. dat is inderdaad nog een flink verschil.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.