[dev] [commit] r985 - phplib/models wwwbase/Crawler
Cătălin Frâncu
cata at francu.com
Wed Sep 18 19:42:29 EEST 2013
Începe să se scurteze, îmi place!
> + return str_replace(array('ă','â','î','ș','ț'),
> array('a','a','i','s','t'), $str);
Folosește StringUtil::unicodeToLatin($str). Face exact același lucru,
dar pentru o gamă mult mai largă de diacritice.
<rant>E mare păcat că Unicode nu ține chiar el o mapare de la caracterul
cu diacritice la cel ASCII din care provine. Așa trebuie să enumerăm noi
câte putem.</rant>
> + /*
> + * Am definit propria forma de diacritice
> + * â,î - circumflex
> + * ă,ș,ț - curbat (caciulita si virgulita)
> + * a,i,s - default
> + */
Înțeleg ce vrei să faci, dar parcă e un pic ciudat. „Curbat” e o
clasificare arbitrară care reunește două diacritice fără nicio legătură
(căciulița și virgula).
Lasă-l așa cum e, că probabil ești în criză de timp, :-) dar adaugă, te
rog un TODO. Cred că ar fi mai nimerit așa:
before varchar(10) NOT NULL,
middle varchar(2) NOT NULL,
after varchar(10) NOT NULL,
count int not null // sau eventual "occurrences" dacă "count" este
keyword rezervat
și atât. Deci dacă "t" apare de 10 ori și "ț" de 20, tu ai avea
structura:
before = 'abcd', middle = 't', after = 'efgh', defaultForm = 10,
curvedForm = 20, circumflexForm = 0.
Eu propun două înregistrări:
before = 'abcd', middle = 't', after = 'efgh', count = 10
before = 'abcd', middle = 'ț', after = 'efgh', count = 20
În momentul când vrem să plasăm diacriticele și trebuie să distingem
între t și ț, facem căutarea tuturor întregistrărilor unde before =
'abcd', after = 'efgh' și middle collate utf_general_ci = "t". Și atunci
MySQL va extrage cele două înregistrări relevante, iar noi o alegem pe
cea cu count cât mai mare. La fel și pentru a / ă / â.
Cătălin
More information about the Dev
mailing list