Salut,
Caut o soluție la următoarea problemă: am text scris cu diacritice și aș vrea să apară ca rezultat dacă fac o căutare fără să folosesc diacritice.
De exmplu, pentru textul
Ana are roșii
atât "rosii" cât și "roșii" ar trebui să fie găsite.
Folosesc mysql, charset-ul bazei de date este utf8 -- UTF-8 Unicode iar collation-ul utf8_romanian_ci.
În baza de date, îl văd pe 'și' ca 'È™i' iar din php (folosesc Zend framework) ma sigur ca setez utf-8 encoding pt views.
Aveți idee de unde aș putea sa încep să rezolv problema?
Muțumesc.[/b]
Căutare insensibilă la caractere românești
Moderatori: coditza, Emil, Moderatori
-
last1devil
- Average Member
- Mesaje: 60
- Membru din: Mar Sep 21, 2010 8:14 pm
- Localitate: Spain
- Contact:
Nu mai fi chel http://www.caderea-parului.ro
- vectorialpx
- Senior Member
- Mesaje: 4832
- Membru din: Mar Mar 01, 2005 9:48 am
- Localitate: Bucuresti
- Contact:
In editor trebuie setat encoding-ul de tip UTF-8 (orice editor care se respecta are aceasta optiune).
Apoi, in MySql... e OK varianta cu FULLTEXT dar nu ti-as recomanda REPLACE pentru ca va trebui sa-l faci nested de prea multe ori, adica
REPLACE( REPLACE( REPLACE( REPLACE pentru toate diacriticile ) ))
Iti sugerez sa faci replace-ul in PHP inainte de cautare. De exemplu, daca va cauta "roșii" va trebui sa faci o verificare pe fiecare cuvant, daca are diacritice si sa-l faci duplicat in varianta fara diacritice. Un fel de
[php]<?php
$cautare = explode ( ' ', $_POST['cautare'] );
$cuvinte = array();
foreach($cautare as $cuvant) {
// vezi ca mai sunt, nu le-am pus pe toate
if(preg_match('/[șȘăîțȚ]/', $cuvant)) {
$cuvinte[] = str_replace(array('ș','ă','î','etc'), array('s','a','i','etc'), $cuvant);
}
$cuvinte[] = $cuvant;
}
?>[/php]
si folosesti un implode ( ' ', $cuvinte ) pentru cautare FULLTEXT
Apoi, in MySql... e OK varianta cu FULLTEXT dar nu ti-as recomanda REPLACE pentru ca va trebui sa-l faci nested de prea multe ori, adica
REPLACE( REPLACE( REPLACE( REPLACE pentru toate diacriticile ) ))
Iti sugerez sa faci replace-ul in PHP inainte de cautare. De exemplu, daca va cauta "roșii" va trebui sa faci o verificare pe fiecare cuvant, daca are diacritice si sa-l faci duplicat in varianta fara diacritice. Un fel de
[php]<?php
$cautare = explode ( ' ', $_POST['cautare'] );
$cuvinte = array();
foreach($cautare as $cuvant) {
// vezi ca mai sunt, nu le-am pus pe toate
if(preg_match('/[șȘăîțȚ]/', $cuvant)) {
$cuvinte[] = str_replace(array('ș','ă','î','etc'), array('s','a','i','etc'), $cuvant);
}
$cuvinte[] = $cuvant;
}
?>[/php]
si folosesti un implode ( ' ', $cuvinte ) pentru cautare FULLTEXT
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 5 vizitatori