[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