Autor | Zpráva | ||
---|---|---|---|
it47 Profil |
Ahojte,
natrafil som na zaujimavy problem - mam aplikaciu kde sa vyhladavaju ulice. Z jednej webstranky som skopiroval nazov ulice, ktory ked dam vyhladat cez Chrome, vypise 0 vysledkov, pricom napriklad cez Chrome najde pocet spravnych vysledkov 10. Ta ulica je Pekná
Problem je v tom dlzni na pismeno 'a' - ked ho dam vymazat klavesnicou, tak najskor zrusi iba dlzen (pismeno "a" zostane) a az potom na druhy krat zrusi aj to 'a'. Cez mb_detect_encoding() bol string identifikovany ako UTF-8. Takze vlastne neviem aky je v tom problem. Mate tusenie aky to moze byt problem? Vopred dakujem velmi pekne. P.S. Ked si ten nazov ulice odtialto skopirujete, tak to á vymaze na prvý krat, kazdopadne z tej stranke sa da vymazat az na druhy krat. A to bude zrejme problem, preco v jednom prehliadaci to skonvertuje spravne a v druhom nie. |
||
Mlocik97m Profil * |
#2 · Zasláno: 15. 12. 2018, 13:50:38
odkaz na tu stranku by sa bodol....
|
||
it47 Profil |
#3 · Zasláno: 15. 12. 2018, 13:59:44
Mlocik97m:
rad by som dal, ale to je v administracii pod heslom... ale myslim, ze ten opis by mohol byt dostatocny :) |
||
Keeehi Profil |
#4 · Zasláno: 15. 12. 2018, 14:16:57
it47:
Podle popsaného chování mě napadá toto. en.wikipedia.org/wiki/Combining_character |
||
Mlocik97 Profil |
JPW -.- žiaľ Vám nepomôžem, lebo diskuje JPW majú rozbyté značky PRE a entity.
|
||
it47 Profil |
#6 · Zasláno: 15. 12. 2018, 20:33:26
Keeehi:
a existuje nejaka php funkcia, ktora by riesila tento problem? Vopred dakujem velmi pekne. |
||
Keeehi Profil |
#7 · Zasláno: 16. 12. 2018, 11:04:20
<?php $input = "a\u{301}"; $output = preg_replace_callback('~(.)\x{301}~u', function($match) { switch($match[1]) { case 'a': return 'á'; case 'e': return 'é'; case 'i': return 'í'; case 'o': return 'ó'; case 'u': return 'ú'; case 'y': return 'ý'; } return $match[0]; }, $input); echo $input . ' ' . bin2hex($input) . '<br>'; echo $output . ' ' . bin2hex($output) . '<br>'; Jenom pozor, pokud si budeš chtít vyzkoušet tento příklad tak musíš v PHP 7. Zápis unicode znaků pomocí \u{xxx} na druhém řádku je podporovaný až od verze 7. Pokud už ale ten text máš v nějaké proměnné, mělo by ti to fungovat i u nižších verzí. Jinak je doufám jasné, že ta funkce je jen ukázka. Pro reálné použití by bylo třeba ji rozšířit o velká písmena. Také předpokládám, že asi budeš chtít nahrazovat i jiná diakritická znaménka. No a ma závěr je ještě potřeba zvážit, jakých jazyků se to nahrazení má týkat a podle toho zvolit vhodná písmena. |
||
juriad Profil |
#8 · Zasláno: 16. 12. 2018, 11:09:15
it47:
Ano existuje: php.net/manual/en/normalizer.normalize.php |
||
it47 Profil |
juriad:
„Ano existuje: php.net/manual/en/normalizer.normalize.php“ V php 7.3. mi pise, ze funkcia neexistuje, ale zrejme si na to musim stiahnut nejaky specialny balicek. Keeehi: „Jinak je doufám jasné, že ta funkce je jen ukázka. Pro reálné použití by bylo třeba ji rozšířit o velká písmena. Také předpokládám, že asi budeš chtít nahrazovat i jiná diakritická znaménka. No a ma závěr je ještě potřeba zvážit, jakých jazyků se to nahrazení má týkat a podle toho zvolit vhodná písmena.“ Dakujem pekne, vyskusam :) Cakal som nejake jednoduchsie riesenie, ocividne je to vacsi problem ako som cakal. |
||
Keeehi Profil |
it47:
„Cakal som nejake jednoduchsie riesenie,“ To je to co navrhuje it47. Neznám všechny existující balíčky, takže jsem vlastně vytvářel obdobu co dělá ta navrhovaná funkce/objekt. Až na to, že to moje je jen ukázka a do produkční verze to má daleko. Ovšem Normalizer je připraven na nasazení. „zrejme si na to musim stiahnut nejaky specialny balicek.“ Ano, jde o rozšíření intl. Na linuxu by k tomu mělo stačit něco v takovém stylu sudo apt-get install php7.3-intl Pokud máš windows, tak tam přesně nevim, jak se to dělá ale zřejmě bude potřeba stáhnout někde správnou knihovnu, umístit ji do složky s ostatními php knihovnami a v php.ini ji povolit. No a pak restartovat PHP službu. |
||
it47 Profil |
#11 · Zasláno: 16. 12. 2018, 17:04:17
Keeehi:
ok, super, vyskusam to, kazdopadne pre tento jeden nahodny pripad to zrejme nema zmysel riesit. Dakujem vemi pekne za pomoc. |
||
Časová prodleva: 5 let
|
0