Avatar billede heyn Nybegynder
21. december 2011 - 08:50 Der er 4 kommentarer og
1 løsning

Hvordan udskiftes dele af tekststrengen med en tilsvarende som fremhævet?

Hej Eksperter

Jeg skal udskifte dele af tekster som jeg finder med en tilsvarende del i fremhævet skrift i html uafhængigt af om det er store el. små bogstaver.
Altså f.eks.
'chr' skal udskiftet (Bemærk at det er et lille 'c'):
Starttekst: <td>Christian</td>
sluttekst: <td><b>Chr</b>istian</td>

Jeg kan ikke på forhånd sige hvilke tekststumper der skal udskiftes, og jeg kan ikke forhånd sige hvordan teksten ser ud.

P.t. anvender jeg følgende metode:

if (isset($_POST['cri_adresse']) && trim($_POST['cri_adresse']) != ""){
  $html .= "<td>".str_replace(trim($_POST['cri_adresse']), '<B>'.trim($_POST['cri_adresse']).'</B>', $res['adresse'])."</td>";
}
else { $html .= "<td>".$res['adresse']."</td>"; }

Men som det fremgår er denne metode afhængig af om bogstaverne er store el. små.

Kender nogen en løsning på dette problem?

MVH Christian
Avatar billede heyn Nybegynder
21. december 2011 - 08:52 #1
Hvis det kan løses med JavaScript er det også helt ok.
Avatar billede The_Buzz Novice
21. december 2011 - 09:35 #2
<?php
$mystring = "<td>Christian</td>";
$findme = "Chr";
if (strpos($mystring, $findme) > 0) {
    $mystring = str_replace($findme, "<strong>".$findme."</strong>", $mystring);
}
echo "\$mystring = " . htmlspecialchars($mystring);
?>

Resultat: http://test.modified.dk/chr.php
Avatar billede The_Buzz Novice
21. december 2011 - 09:39 #3
http://test.modified.dk/chr.php?findme=chris

Du kan redigere findme= i den URL og så vil den checke scriptet med denne nye redigerede version jeg har her nedenfor:

<?php
if (!isset($_GET['findme'])) $findme = "chr";
else $findme = $_GET['findme'];
$mystring = "<td>Christian</td>";

if (strpos(strtolower($mystring), strtolower($findme)) > 0) {
    $mystring = str_replace(strtolower($findme), "<strong>".$findme."</strong>", strtolower($mystring));
}
echo "\$mystring = " . htmlspecialchars($mystring);
?>
Avatar billede heyn Nybegynder
21. december 2011 - 10:04 #4
Jeg testede med følgende:

$mystring = "<td>Christian</td>";
$findme = "chr";

if (strpos(strtolower($mystring), strtolower($findme)) > 0) {
    $mystring = str_replace(strtolower($findme), "<strong>".$findme."</strong>", strtolower($mystring));
}
echo "\$mystring = " . $mystring."<br>";

Godt nok bliver 'chr' vist fremhævet, men samtidig bliver 'C' til 'c'.
Kan det løses?
Avatar billede heyn Nybegynder
21. december 2011 - 11:05 #5
Tak The_Buzz

Du ledte mig i den rigtige retning.

Da det kun er nødvendigt at fremhæve 1 gang blev løsningen:

$origstr = "<td>Christian Christiansen</td>";
$findme = "chr";
$startbold = "<strong>";
$endbold ="</strong>";
$strlen = strlen($findme);
$start = strpos(strtolower($origstr), strtolower($findme));
$newstring = substr_replace($origstr, $endbold, $start + $strlen, 0);
$newstring = substr_replace($newstring, $startbold, $start, 0);

MVH Christian (og god jul)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester