Woorden/letters vervangen doet raar.

Status
Niet open voor verdere reacties.

Dylanh

Gebruiker
Lid geworden
19 feb 2013
Berichten
124
Hallo,

Ik heb dit script:
Code:
<?php
$showkey = str_replace(ucfirst($_POST['station']), '<b><u>'.htmlentities(ucfirst($_POST["station"]), ENT_QUOTES).'</u></b>', $founds["fullname"][$i]);
$showkey = str_replace(lcfirst($_POST["station"]), '<b><u>'.htmlentities(lcfirst($_POST["station"]), ENT_QUOTES).'</u></b>', $founds["fullname"][$i]);

Als $_POST['station'] nu bijvoorbeeld 'l' is dan staat er dus eigenlijks dit:
vervang alle L`s naar <b><u>L</u></b> in $founds["fullname"][$i];
vervan alle l`s naar <b><u>l</u></b> in $founds["fullname"][$i];

Dit wil ik dus hebben alleen toch word de output zo als ik l intyp:
s0C1go8.png

en als ik L intyp hetzelfde.

Weet iemand wat het probleem is? De 2 regels ook al omgedraait maar altijd werkt de laatste.
 
$text = "<p> veel tekst";
print str_replace(array('<p>')," paragraaf:",$text);

let op de str_replace niet meer gebruiken (zal mogelijks eruitgaan);
gebruik
preg_replace
 
Je hebt twee str_replace methodes die beiden gebruik maken van $founds["fullname"][$i] als invoer en $showkey als output. Hierdoor schrijf je de eerste output over door de tweede output.

Wellicht werkt het beter als je het volgende gebruik:
PHP:
// Initieer een default waarde
$showkey = $founds["fullname"][$i];

// Gebruik de default waarde als in- en output waarde
$showkey = str_replace(ucfirst($_POST['station']), '<b><u>'.htmlentities(ucfirst($_POST["station"]), ENT_QUOTES).'</u></b>', $showkey);
$showkey = str_replace(lcfirst($_POST["station"]), '<b><u>'.htmlentities(lcfirst($_POST["station"]), ENT_QUOTES).'</u></b>', $showkey);
 
let op de str_replace niet meer gebruiken (zal mogelijks eruitgaan);

ereg_replace() bestaat sinds PHP 5.3.0 niet meer, str_replace blijft voorlopig nog wel bestaan :)

Overigens is het in dit geval "handiger" om preg_replace te gebruiken:

PHP:
// Variabele toewijzen voor het voorbeeld
$_POST['station'] = "l";

// Lijstje met stations
$stations = array(
    'Landgraaf',
    'Leiden Centraal',
    'Leeuwarden',
    'Amsterdam Centraal',
);

foreach($stations AS $station) {
    echo preg_replace('/'. $_POST['station'] .'/i', '<b><u>$0</u></b>', $station) .'<br />';
}
 
Laatst bewerkt:
Wat ben je precies aqan het doen, want het lijkt erop dat je in een HTML document bold en underline tags rond bepaalde teksten wilt zetten. Dat kun je zo niet doen tenzij je een manier hebt om te garanderen dat de gezochte tekst nooit ergens anders kan vorokomen dan op de plek waar jij hem wilt vervangen, en dat gaat niet ivm woorden als "center" wat zowel een CSS ding is als een deel van een naam "World Fashion Center" (ja, verkeerd gespeld, afhankelijk van waar je woont)

HTML bewerk je via het DOM, zie DOMDocument etc. Daarmee kun je alle te-vervangen teksten ook eenvoudig vinden via XPATH queries, en je kunt de elementen van het document vervangen met echte HTML tags. Het is wat meer werk maar de oplossing is dertig keer zo robuust als klieren met regexps.
 
Lijkt mij eerder dat er een lijstje met namen uit een database die overeenkomen met de zoekterm, vervolgens wordt de zoekterm bij die namen geaccentueerd.
 
Dat zou een kwestie zijn van

SELECT '<b><u>' || veld || '</u></b>' AS veld_accent

En dus ook geen toepassing voor regexps.

Afijn, mede hierom vind ik het altijd erg prettig als de TS vertelt wat het probleem is en niet alleen welke opplossing hij bedacht heeft. :-)
 
Dan krijg je het volledige resultaat vetgedrukt en onderstreept terwijl het waarschijnlijk de bedoeling is dat als er op "aal" gezocht wordt alleen die term benadrukt wordt.

Maar inderdaad; zoals zo vaak is meer uitleg van de TS gewenst :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan