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]str_replace niet uitvoeren binnen [code]-tag

Ger
2 antwoorden
  • Heb de volgende code om [dvd]-links naar bol.com te maken (resultaat zie hier, ben het ook aan het implementeren op een Invision-forum, werkt grotendeels hetzelfde en heb zelfde bug).
    [code:1:0c1fc19bfe]//Start dvd
    //Hebben we DVD's?
    preg_match_all('#\[dvd\](\d+)\[/dvd\]#',$txt, $matchees );
    foreach ($matchees as $eanin){}
    unset($matchees);
    //Treedt toe tot de wondere wereld van Bol
    foreach ($eanin as $ean)
    {
    $data = implode("",@file("http://www.nl.bol.com/is-bin/INTERSHOP.enfinity/eCS/Store/nl/-/EUR/BOL_AffiliateMap-Start?LinkType=Search&Section=VIDEO&QueryType=EAN&SearchText=$ean%22&Referrer=TDRc93afb4f79de3042cb1d8bfe8e5055b71506965"));
    preg_match('#BOL_OWNER_ID=([0-9]+)&Section=VIDEO#',$data,$matchees);
    $prdId = $matchees[1];
    $aantal=count($matchees[1]);

    if ($aantal==0)
    {
    $txt = str_replace($ean, "[EAN $ean onbekend]", $txt);
    $txt = str_ireplace("[/dvd]", "", $txt);
    $txt= str_ireplace("[dvd]", "", $txt);
    }
    else
    {
    unset($matchees);

    //titelramp…
    preg_match('#Section=1"\>(.+)\<\/a\>\<\/b\>\<\/font\>\<br\>#sx',$data,$matchees);
    $predvd = $matchees[1];
    unset($matchees);
    preg_match ('#Section=1"\>(.+)#xs', $predvd, $matchees);
    $dvd = $matchees[1];
    unset($matchees);

    /
    egiseur
    preg_match('#BOL_ARTIST_ID=1"\>(.*?)\<\/font\>\<\/a\>\<\/font\> \|#s',$data,$matchees);
    $regis = $matchees[1];
    unset($matchees);

    //gaat heen en creëert eenen cover
    $coverPath = "";
    for ($map=0; $map<5; $map++) $coverPath .= $ean[$map].'/';

    //En we maken er wat moois van
    $txt = str_replace($ean, " <!–start dvdlink–><a href=\"http://clk.tradedoubler.com/click?a=$bfMid&p=$siteId&g=$sectionIddvd&epi=$prdId\" title=\"Bestel via deze link en steun Wetenschapsforum\" alt=\"$dvd\" target=\"_blank\"><img src=\"http://img.bol.com/intershoproot/VIDEOCOVER/FC/$coverPath$ean.gif\" alt=\"$dvd\" border=\"0\"><br />$dvd<br />$regis</a><!–einde dvdlink–>", $txt);
    $txt = str_ireplace("[/dvd]", "", $txt);
    $txt = str_ireplace("[dvd]", "", $txt);
    }
    }[/code:1:0c1fc19bfe]
    Ik zit nu met 1 bug: binnen -tags hoort dit genegeerd te worden. Gebeurt ook, maar [u:0c1fc19bfe]niet[/u:0c1fc19bfe] als [i:0c1fc19bfe]binnen 1 bericht[/i:0c1fc19bfe] zowel binnen [code]-blokken als daarbuiten [i:0c1fc19bfe]dezelfde[/i:0c1fc19bfe] EAN-code tussen dvd-tags wordt ingevuld. Zijn die twee verschillend, gaat het wel goed. Ik gok haast dat het door de str_replace op het eind komt, dat die [i:0c1fc19bfe]alles[/i:0c1fc19bfe] vervangt als het gevonden wordt buiten code-tags. Waarschijnlijk zit er dus een foutje in de loop, maar ik zie niet waar. Ben al zó ver gekomen, zou zonde zijn als het hierop afknapt. Iemand die de fout wel ziet misschien?
  • En als je het laatste stukje vervangt door dit?

    [code:1:83dca6c57e]
    //En we maken er wat moois van

    str_ireplace("[dvd]$ean[/dvd]", " <!–start dvdlink–><a href=\"http://clk.tradedoubler.com/click?a=$bfMid&p=$siteId&g=$sectionIddvd&epi=$prdId\" title=\"Bestel via deze link en steun Wetenschapsforum\" alt=\"$dvd\" target=\"_blank\"><img src=\"http://img.bol.com/intershoproot/VIDEOCOVER/FC/$coverPath$ean.gif\" alt=\"$dvd\" border=\"0\"><br />$dvd<br />$regis</a><!–einde dvdlink–>");
    [/code:1:83dca6c57e]

    Ik heb er alleen even snel doorheen gelezen en niets getest..
    Ik ga ervan uit dat je de [dvd] en [/dvd] tags reeds eerder heb omgezet naar html code bij het afvangen van de tag. Good luck EDIT: Na het nogmaals doorlezen van je post vermoed ik dat je met je probleem iets anders bedoelde dan wat ik zojuist heb gedaan. Volgens mij moet je bij het afvangen van de [code] tag de [ en ] vervangen door html codes ([ en ] respectievelijk). Dit dient te gebeuren voordat de [dvd] code wordt afgevangen. Op die manier wordt deze eerst omgezet naar html en zal deze gewoon letterlijk in het code blok komen te staan. Bij het checken op [dvd] zal deze niet meer afgevangen worden omdat er inmiddels [dvd] staat. Hopelijk heb je er wat aan :)

Beantwoord deze vraag

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