Căutare insensibilă la caractere românești

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

anne25
New Member
Mesaje: 1
Membru din: Dum Noi 21, 2010 7:45 pm

Căutare insensibilă la caractere românești

Mesajde anne25 » Dum Noi 21, 2010 7:57 pm

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]



last1devil
Average Member
Mesaje: 60
Membru din: Mar Sep 21, 2010 8:14 pm
Localitate: Spain
Contact:

Mesajde last1devil » Dum Noi 21, 2010 8:29 pm

Incearca cu str_replace();

$search = "Ana are roșii";

$s = array("ș", "ă", "î", "etc");
$r = array("s", "a", "i", "etc");

$new_search = str_replace($s, $r, $search);

Asa obtii un text fara diacritice.
Be creative!

spint
Average Member
Mesaje: 150
Membru din: Joi Dec 03, 2009 10:23 am
Contact:

Mesajde spint » Lun Noi 22, 2010 11:50 am

O sotie buna isi iarta intotdeauna sotul atunci cand ea greseste
|

badtiger
Senior Member
Mesaje: 598
Membru din: Vin Noi 03, 2006 7:54 pm
Contact:

Mesajde badtiger » Mie Noi 24, 2010 12:14 am


lugojan
Average Member
Mesaje: 81
Membru din: Mar Noi 22, 2005 8:52 am
Localitate: romania

Mesajde lugojan » Dum Sep 11, 2011 9:39 pm


iulian30bv
PHPRomania Supporter
Mesaje: 6
Membru din: Lun Noi 21, 2011 10:11 pm

Mesajde iulian30bv » Lun Noi 21, 2011 11:02 pm


Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Mie Noi 23, 2011 11:00 am

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

Avatar utilizator
mfwsro
Average Member
Mesaje: 188
Membru din: Mie Dec 03, 2008 1:03 pm
Contact:

Mesajde mfwsro » Lun Dec 05, 2011 8:46 am


expertphp
PHPRomania Supporter
Mesaje: 15
Membru din: Sâm Oct 02, 2004 12:00 am
Localitate: Constanta
Contact:

Mesajde expertphp » Dum Ian 08, 2012 11:35 pm



Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 5 vizitatori