Ik haal data op uit een bestand > hier wil ik woorden uit filteren > vervolgens opslaan in database. Alleen het filteren van de woorden gaat nog niet helemaal goed.

Ik krijg de volgende foutmelding:
"Warning: preg_replace() expects parameter 4 to be long, string given in /home/.... on line 24"

Onderstaande code zijn regel 23 en 24:


$titleb = replace(trim(stripslashes(htmlentities($list->lange_titel, ENT_COMPAT, "UTF-8"))));
$titlec = preg_replace("/Huis/", "/Huis /", "/Vereniging/", "/Aparthotel/", $titleb);


Wanneer ik er enkele woorden uithaal lijkt het wel goed te gaan.
Kortom: welke code moet ik gebruiken als ik meerdere woorden eruit wil filteren?
Van php.net:
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
Als je 5 parameters meegeeft moeten de laatste 2 integers zijn.
Geen idee of dit is wat je zoekt:

<?php
$titleb = trim(stripslashes(htmlentities($list->lange_titel, ENT_COMPAT, "UTF-8")));
$titleArray = array("Huis", "Huis ", "Vereniging", "Aparthotel");

if(in_array($titlec, $titleArray))
{
$newtitle = str_replace($titlec, $titleb, $titlec);
echo $newtitle;
}
?>
@Goto Learn: Volgens mij doet deze het dan precies andersom?

Voorbeeldje om het duidelijker te maken. Nu is de waarde bijvoorbeeld "Vogel vereniging" of "Huis te Zeezicht". In dit voorbeeld moet vereniging en huis eruit zodat je krijgt "Vogel" en "te Zeezicht".
@Peter S

Aah okee, nu begrijp ik het beter ja. In dat geval zul je dus een regex moeten gebruiken en daar vind je wel genoeg informatie over op google.. Zoek naar soortgelijke voorbeelden.

[size=xsmall]Toevoeging op 03/08/2014 15:37:59:[/size]

Probeer dit eens:

<?php
$string = 'In mijn huis word er niet gefeest!';
$myWords = array('huis', 'Etc..', 'Etc..', 'Etc..');
$Check = array();

$CheckFound = preg_match_all('/\b(' . implode($myWords, '|') . ')\b/i', $string, $Check);

if ($CheckFound) {

$Words = array_unique($Check[0]);

foreach ($Words as $Word) {
$string = str_replace($Word, '', $string);
echo $string;
}
}
?>
Dit werkt inderdaad, thanks.
@Peter S

Graag gedaan. Het is overigens een goed idee om strtolower() bij te voegen voor het geval iemand hoofdletters gebruikt.

<?php $CheckFound = preg_match_all('/\b(' . implode($myWords, '|') . ')\b/i', strtolower($string), $Check); ?>

Reageren