FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Tjena,
försöker göra en sökfunktion i en "nyhetsblogg". Och det fungerar så länge man inte skriver ÅÄÖ. text, är html formaterad text sparad i MySQL databas. Hur kan jag fixa så det fungerar även med ÅÄÖ? Vad gör jag för fel? Kod:
$seek = $_POST['seek']; $seek = str_replace('å', 'å', $seek); $seek = str_replace('Å', 'Å', $seek); $seek = str_replace('ä', 'ä', $seek); $seek = str_replace('Ä', 'Ä', $seek); $seek = str_replace('ö', 'ö', $seek); $seek = str_replace('Ö', 'Ö', $seek); $seek = str_replace('"', '"', $seek); $seek = str_replace('”', '”', $seek); $seek = str_replace('“', '“', $seek); $seek = str_replace('&', '&', $seek); $sql = "SELECT id, text, date, image, headline, flag FROM `".$prefix."_newsblog` WHERE text LIKE '%".$seek."%' ORDER BY date DESC"; |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Klarade millennium-buggen
|
När du söker i fulltext bör man använda MySql:s inbyggda funktion för detta. Lägg till FULLTEXT som index för de aktuella kolumnerna i databasen. Sökningen sker sedan med villkoret:
WHERE MATCH(kolumn) AGAINST('sökord'). Sedan vill du konvertera till html entitites. Det gör du enklare och säkrare genom att använda php:s inbyggda funktion htmlentities Det verkar som om du lägger in strängarna kodade med htmlentities. Det är egentligen onödigt, och det vore antagligen bättre om du kunde lagra texten där som den är och eventeullt konvertera den när du tar ut den för visning. |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Flitig postare
|
Hej, tack för ditt snabba svar.. men jag vet inte om det är jag som inte fattar eller vad.
Kod:
if(isset($_POST['go']) && $_POST['search'] != '' && strlen($_POST['search']) >= 2){ $seek = htmlentities($_POST['search']); $sql = "SELECT id, text, date, image, headline, flag FROM `".$prefix."_newsblog` WHERE MATCH(text, headline) AGAINST('".$seek."') ORDER BY date DESC"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { //...osv. Söker jag dock på gärna eller både så hittar den inget, och detta är ord jag vet finns med i texten den söker igenom. Hur kommer detta sig? Ett sparat inlägg ser ut såhär i databasen; Kod:
<p><strong>Från och med den 20 maj 2008 har vi en helt ny hemsida.</strong></p> <p>Som du ser, har mycket på sajten förändrats, dock Vi vill gärna veta vad du som besökare tycker, både positiv och negativ kritik. Det viktiga är dock att ditt omdöme är konstruktivt.</p> Citat:
|
||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Mycket flitig postare
|
Använd utf-8:
1. deklarera utf-8 i html, 2. sätt databasen till utf-8 (och strunta i den omständiga och onödiga konverteringen till &osv; ) |
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Flitig postare
|
Citat:
vad är det för skillnad på att söka efter både när det är sparat som både i texten eller söka efter både när det är sparat som både? Tänk om jag måste söka efter både ? |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Klarade millennium-buggen
|
Vet inte om Mysql:s fulltextsök är gjort för att användas på html-entities-kodade texter. Tror att den tolkar & och ; som ordslut.
Html är inga problem att söka i, ända tills någon försöker söka på till exempel strong, då borde han få hitts på varje inlägg. Det bästa är att göra som martine rekommenderar, sluta använda entities och hålla sig till utf8. Om du absolut och mot bättre vetande måste ha kvar dina inlägg i denna kodade form, så är min rekommendation att skapa ett till fält i databasen där du lägger in text körd genom html_entity_decode och eventuellt strip_tags så att du får en riktig text att söka på. Lycka till. |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Flitig postare
|
ok tack!
men låt oss säga, att man skulel söka genom "HTML" sidor, så vi inte hänger upp oss på "blogg" inlägg, alltså sidor som kräver att det är html, för att det tex finns tabeller, bilder och en massa annan skräp, då är det alltså bäst att rensa datan med strip_tags och html_entity_decode, och söka i den texten istället. Tack. |
||
![]() |
![]() |
Svara |
|
|