TrollMedlem sedan dec. 2003229 inlägg Hejsan!
Skulle behöva hjälp med 2 saker, först och främst vore det trevligt att veta om koden som kommer är bra eller om den bör skrivas om för att bli mer effektiv och hjälp med att fixa så att själva orden inte ändrar på sig.
Ok...
Denna kod använder jag för att skapa länkar av ord i en text:
function makeWordLink($text) {
db_connect();
$ord = array();
$ord_query = "SELECT oWord FROM tbl_words";
$row_ord = mysql_query($ord_query) or die(mysql_errno().' '.mysql_error());
while( $a = mysql_fetch_array($row_ord) ) {
$ord[] = $a['oWord'];
}
foreach ($ord as $value) {
if (strpos($text, $value) !== false) {
$replace = "<a href=\"/ordlistan/".substr($value,0,1)."/$value/\"\">$value</a>";
$text = str_ireplace($value, $replace, $text);
}
}
return $text;
}
$Texten = "En massa text från databasen som ska påverkas";
echo makeWordLink($Texten);
Det funkar prima men problemet är att orden i texten ändras, tex:
Ordet från oWord är 'Öl' och i texten finns ordet 'Mjölk', då skrivs texten ut såhär: MjÖlk. Det vill jag ju inte, jag vill att ord i ord ska påverkas men inte ändras sådär. Förstår ni?
Tacksam för all hjälp jag kan få!
JosefMedlem sedan mars 20023 561 inlägg Om du vill att ord i ord ska ändras blir det svårt. Då måste ju funktionen veta vad som är ett eget ord inbakat eller om bara samma bokstäver i samma följd förekommer i ett "eget" ord.
Skulle gissa på att det är ganska omöjligt om man inte skall implementera hela ordlistan och veta vilja ord som finns och vilka ord som i sin tur består av flera ord.
TrollMedlem sedan dec. 2003229 inlägg Jomen alltså, ord som finns i ord blir ju påverkade som jag vill om man bortser från stora/små bokstäver. Eller missuppfattade jag dig helt nu?
Det enda som inte funkar som jag vill är just att om man skriver ordet 'MJÖLK' i en text så ska det bli formaterat om ordet 'Mjölk' finns i ordlistan. Det funkar. Men problemet är att istället för att skriva ut 'MJÖLK' så skrivs det ut 'Mjölk'.
Hänger du med hur jag menar?
TrollMedlem sedan dec. 2003229 inlägg Jag tar och återupplivar denna tråd.
Har fortfarande inte fått detta att funka som jag vill, den hittar och byter ut ord som den ska men enbart om det är EXAKT som det är i databasen, ibland skrivs ju orden med små bokstäver och då funkar det inte :( Ingen som har några tips?
TrollMedlem sedan dec. 2003229 inlägg Yay! En liten bit påväg iaf, använde strripos() istället och då hittades även ord som har stora/små bokstäver, kruxet är dock när själva länkningen sker så ändras ordet så att det ser ut som det gör i databasen :(
Någon som kan peka åt rätt håll?
TrollMedlem sedan dec. 2003229 inlägg $ord = array();
$ord_query = "SELECT oWord FROM tbl_words";
$row_ord = mysql_query($ord_query) or die(mysql_errno().' '.mysql_error());
while( $a = mysql_fetch_array($row_ord) ) {
$ord[] = $a['oWord'];
}
foreach ($ord as $value) {
if (strripos($text, $value) !== false) {
$replace = "<a href=\"/ordlistan/".substr($value,0,1)."/$value/\"\">$value</a>";
$text = str_ireplace($value, $replace, $text);
}
}
Samma lika, bara strripos() istället för strpos().
Jag tycker att det inte borde vara omöjligt med tanke på att man kan jämföra två strängar och kolla om det är samma utan att det ska vara case sensitive, man _borde_ ju kunna använda sig av något liknande i detta fall hoppas jag.
salkciNMedlem sedan sep. 200619 inlägg använd regular expressions som t.ex preg_replace()
Din funktion kan då kortas ner till exempelvis detta:
function makeWordLink($text) {
$ord_query = "SELECT oWord FROM tbl_words";
$row_ord = mysql_query($ord_query) or die(mysql_errno().' '.mysql_error());
while($a = mysql_fetch_array($row_ord)) {
$ord = $a['oWord'];
$text = preg_replace("/($ord)/ise", '"<a href=\"/ordlistan/" . substr("\\1", 0, 1) . "/\\1\">\\1</a>"', $text);
}
return $text;
}
$Texten = "En massa text från databasen som ska påverkas";
echo makeWordLink($Texten);
TrollMedlem sedan dec. 2003229 inlägg Mjo det funkar ju finemang men är det verligen regexp att föredra, något säger mig att det är snabbare och mindre krävande att köra på tanken jag hade. Eller så har jag tolkat saker och ting lite fel.
Tänkte på om det körs på relativt stora texter och med många ord som påverkas.
Men ett stort tack för hjälpen! Får köra med det tills jag får klarhet i det hela :)
TrollMedlem sedan dec. 2003229 inlägg Verkar dock inte fungera om man har ord som innehåller åäö :(
salkciNMedlem sedan sep. 200619 inlägg
Troll skrev:
Ordet från oWord är 'Öl' och i texten finns ordet 'Mjölk', då skrivs texten ut såhär: MjÖlk. Det vill jag ju inte, jag vill att ord i ord ska påverkas men inte ändras sådär. Förstår ni?
Om du inte vill att ovanstående ska ske, då är preg_replace() att föredra.
TrollMedlem sedan dec. 2003229 inlägg Mjo det verkar så, man kan inte få allt :)
Har du någon lösning på åäö-biten?