webForumDet fria alternativet

Söker fel på svenska tecken

PHP

4 svar · 452 visningar · startad av lilja

Medlem sedan juli 20041 183 inlägg
Frågan#1

Jag försöker mig på att få utf-8 att fungera på en sida jag gör i en kurs jag läser. Läraren hjälper dock bara till med iso-8859-1 så jag hoppas jag kan få svar här? :)

Först och främst fungerar alla (svenska) tecken fint. Det jag har problem med är sökning i databasen då å och ä behandlas som a. ö behandlas som o. Eller det verkar så i alla fall.

Är det någon mer här som vet något om detta? Beror det på databasen eller php-koden? Jag har testat med både utf8_general_ci och utf8_swedish_ci i databasen och min sökning går mot en vy.

När jag skriver min fråga direkt i databasen får jag samma resultat så det kanske inte beror på min PHP-kod?

Min sökning:

$search = $mysqli->real_escape_string($_GET['search']);
$query = sprintf('SELECT * FROM VEquipmentFriend WHERE FullName LIKE \'%%%1$s%%\' OR Nickname LIKE \'%%%1$s%%\' OR Title LIKE \'%%%1$s%%\';', $search); 

$mysqli->query("SET NAMES utf8") or die(mysql_error());
$mysqli->query("SET CHARACTER SET utf8") or die(mysql_error()); 

$res = $mysqli->query($query) 
	or die("Could not query database, query =<br/><pre>{$query}</pre><br/>{$mysqli->error}");

Fullständig kod: http://www.student.bth.se/~chlh09/source.php?dir=kmom06&file=index.php

Medlem sedan mars 20007 896 inlägg
#2

Se mitt svar i tråden ÅÄÖ strul.

Medlem sedan juli 20041 183 inlägg
#3

Ok, allt det där har jag gjort. Sorteringen fungerar inte men det är säkert för att jag körde på utf8_general_ci från början och missat ändra någonstans.

Det jag har problem med är att när jag söker på ä får jag alla resultat som innehåller a, å och ä?? Jag vill bara ha strängar som innehåller ä i det fallet.

Förenklad söknig:

SELECT * FROM Tabell Where Kolumn LIKE '%ä%';
Medlem sedan mars 20007 896 inlägg
#4

Kasta om till den kollationering som ska användas för sökningen.

select
    *
from
    table
where
    cast(myColumn as char character set 'utf8') collate 'utf8_swedish_ci'
        like
            '%ä%'

Som sagt, vet du med dig att du enbart kommer att använda svenska som språk kan du slippa såna här "problem" genom att använda utf8_swedish_ci som kollationering från början.

Medlem sedan juli 20041 183 inlägg
#5

Yes, jag hade missat ändra från general_ci till swedish_ci på kolumnerna. Det löste både sökningen och sorteringen. Tack! :)

256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)