Gå til innhold

Script for å bytte ut enkeltord i tekst


Anbefalte innlegg

Jeg er på utkikk etter et script som er slik at det når php henter tekst fra SQL så blir alle ord som også ligger i en liste på webhotellet byttet ut med noe annet.

Slik at hvis det står php i teksten så blir det byttet ut med http://www.php.no, ubuntu blir http://www.ubuntu.no, windows blir http://www.windows.no og så videre.

Er det noen som vet hvordan man kan få dette til å fungere?

 

Enda bedre hadde det vært om selve listen kunne være plassert i MySQL også.

Lenke til kommentar
Videoannonse
Annonse

Jeg tror dette kan løses ved å lage en egen tabell i mysql med alle de spesielle ordene sammen med den eventuelle webadressen (ord | adresse f.eks....). Det du da gjør er å bruke funksjonen str_replace () til å erstatte ordene. Har ikke tid til et stort eksempel, men kan hjelpe deg litt:

 

<?php
// Du må hente tekststrengen fra databasen, altså den lange teksten og legge den i en variabel ($streng)
// Du må hente de spesifikke ordene i tabellen din med en løkke
// La oss si at tabellen din ser slik ut: ord  |  adresse

while ($ord = mysql_fetch_array($query_resultat)) {
 str_replace ($ord[0], "<a href='" . $ord[1] . "'>" . $ord[0] . "</a>", $streng);
}

?> 

 

$ord[1] er adressen som settes inn i en vanlig html link slik at teksten bytter ut f.eks. da PHP med <a href="www.php.net">PHP</a>.

 

Håper det er til hjelp! ;)

 

EDIT: Husk å ta hensyn til om strengen er i store eller små bokstaver!

Endret av kjey
Lenke til kommentar
Jeg tror dette kan løses ved å lage en egen tabell i mysql med alle de spesielle ordene sammen med den eventuelle webadressen (ord  |  adresse   f.eks....). Det du da gjør er å bruke funksjonen str_replace () til å erstatte ordene. Har ikke tid til et stort eksempel, men kan hjelpe deg litt:

 

<?php
// Du må hente tekststrengen fra databasen, altså den lange teksten og legge den i en variabel ($streng)
// Du må hente de spesifikke ordene i tabellen din med en løkke
// La oss si at tabellen din ser slik ut: ord  |  adresse

while ($ord = mysql_fetch_array($query_resultat)) {
 str_replace ($ord[0], "<a href='" . $ord[1] . "'>" . $ord[0] . "</a>", $streng);
}

?> 

 

$ord[1] er adressen som settes inn i en vanlig html link slik at teksten bytter ut f.eks. da PHP med <a href="www.php.net">PHP</a>.

 

Håper det er til hjelp!  ;)

 

EDIT: Husk å ta hensyn til om strengen er i store eller små bokstaver!

6159875[/snapback]

Kan man ikke bare kjøre de listene i en array?

 


$Tekst = "Tekst som skal endres";


$OrdUtenURL = array("windows","linux","mac"); 
$OrdMedURL = array("www.windows.com",linux.com","mac.com"); 

$NyTekst = str_replace($OrdUtenURL, $OrdMedURL, $Tekst);

 

Måten du fyller opp arrayene velger du selv. Tror det skal fungere.

 

edit:

Jeg vet ikke helt hvordan det vil fungere om man har eksisterende tilfeller av "windows.com".. OM det da blir "windows.com.com" er jeg veldig usikker på. Men det får du nesten bare teste.

Endret av arnizzz
Lenke til kommentar

Joda, den siste der er helt riktig, men for å forhindre windows.no.no, legg inn mellomrom:

 

$Tekst = "Tekst som skal endres";


$OrdUtenURL = array(" windows "," linux "," mac ");
$OrdMedURL = array(" www.windows.com "," linux.com "," mac.com ");

$NyTekst = str_replace($OrdUtenURL, $OrdMedURL, $Tekst);

 

Du hadde forsåvidt glemt et " også ;)

Lenke til kommentar
Joda, den siste der er helt riktig, men for å forhindre windows.no.no, legg inn mellomrom:

 

$Tekst = "Tekst som skal endres";


$OrdUtenURL = array(" windows "," linux "," mac ");
$OrdMedURL = array(" www.windows.com "," linux.com "," mac.com ");

$NyTekst = str_replace($OrdUtenURL, $OrdMedURL, $Tekst);

 

Du hadde forsåvidt glemt et " også ;)

6162789[/snapback]

 

Mellomrom ja.. haha. Selvfølgelig. :p

Lenke til kommentar

Nei..

 

Men hvis alt det skulle taes med så ville du måtte bruke pregmatch ;)

 

$Tekst = "Tekst som skal endres";


$OrdUtenURL = array("windows","linux","mac");
$OrdMedURL = array("www.windows.com","linux.com","mac.com");

$NyTekst = preg_replace('/\s{1}'.$OrdUtenURL.'(\s|\.|\,|\n)/ig', ' '.$OrdMedURL."$1", $Tekst);

 

Fornøyd nå? :p

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...