Kom ihåg mig?
Home Menu

Menu


Sökning i MySQL

Ämnesverktyg Visningsalternativ
Oläst 2008-04-17, 10:37 #1
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
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";
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-17, 10:56 #2
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
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.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-17, 11:31 #3
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
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.
Fungerar sisådär.... söker jag på första så hittar den 3, söker jag på förändrats hittar jag 1, vilket låter rimligt.
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&aring;n och med den 20 maj 2008 har vi en helt ny hemsida.</strong></p>
<p>Som du ser, har mycket p&aring; sajten f&ouml;r&auml;ndrats, dock 
Vi vill g&auml;rna veta vad du som bes&ouml;kare tycker, b&aring;de positiv och negativ kritik. Det viktiga &auml;r dock att ditt omd&ouml;me &auml;r konstruktivt.</p>
Citat:
Originally posted by Magnus_A@Apr 17 2008, 10:56

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.
Dessvärre lagras "texten", eller kanske snarare ska kalla det datan, som html. För att användaren skall kunna redigera fritt (använder en WYSIWYG-motor).
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-17, 11:47 #4
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
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; )
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-17, 11:54 #5
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
Citat:
Originally posted by martine@Apr 17 2008, 11:47

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; )
Okej, men det måste väll fungera utan att köra UTF-8?

vad är det för skillnad på att söka efter b&aring;de när det är sparat som b&aring;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&aring;de ?
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-17, 13:48 #6
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
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.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-04-17, 21:12 #7
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
grinditwp grinditwp är inte uppkopplad
Flitig postare
 
Reg.datum: Mar 2008
Inlägg: 320
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.
grinditwp är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:50.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017