proč regulární výraz p[e|é|ě][s|š] při hledání ve sloupci databáze vrací nejen „peškova“ ale i „peřinova“?
- zacatecnik27
- Člen | 26
proč regulární výraz p[e|é|ě][s|š]
při hledání ve
sloupci databáze vrací nejen „peškova“ ale i „peřinova“ ?
nečekaný výsledek vrací jednoduchá podmínka
->where('ulice REGEXP ?','p[e|é|ě][s|š]')
, zcela záměrně
jsem nepoužil zápis p[eéě][sš]
abych
jednoznačně izoloval případné vícebytové sekvence a nevím co pro to víc
ještě udělat.
Je jisté, že problém má příčinu ve zpracování vícebytového znaku
UTF-8 kódování, první byte znaku ř
a š
je
v utf-8 shodný, ale od toho je přece abstrakce, aby vyšší úrovně už
mohly se znakem pracovat jako s jedním bez ohledu na jeho vnitřní
vícebytovou reprezentaci :-) nevím si s tím rady, působí to na mne jako
chyba. Veškeré PHP skripty píšu v UTF-8 kódování a veškeré tabulky
databáze MySQL 5.7.19
mám v utf8_czech_ci
.
V konfiguračním souboru neon mám u databázového spojení uvedeno
"dsn: 'mysql:host=127.0.0.1;dbname=****;charset=UTF8'"
ale chová
se to bohužel chybně ať už to tam to explicitní vyžádání kódování je
nebo není …
Ještě jeden důležitý poznatek, když ve stejné konfiguraci jen použiji podmínku ->where(‚ulice ?‘, ‚peškova‘) tak vrátí správně jen tuto ulici a stejně tak pokud zavolám ->where(‚ulice ?‘, ‚peřinova‘) také vrátí úspěšně jen tuto ulici přesně podle očekávání, takže se v tomto případě chová naprosto správně, ten problém nastává jen při použití REGEXP …
Děkuji za radu jak tohle vyřešit.
Pokud Vás napadá zcela odlišný způsob kromě výše uvedeného REGEXP v dotazu jak při vyhledávání vyjít vstříc uživatelům, kteří diakritiku nepoužívají ? Pokračujte prosím tudy. I za takový tip budu velmi vděčný.
Editoval zacatecnik27 (21. 9. 2017 9:35)