| 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: 7 let
|
|||
0