Autor | Zpráva | ||
---|---|---|---|
nethor Profil |
#1 · Zasláno: 7. 11. 2013, 11:53:53
Ve snippetech vyhledávání potřebuji z textu vyházet vícenásobné mezery.
Používám tento postup: mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); function bezmezer($text){ $text = Trim(preg_replace("~\s+~"," ",$text)); return $text ; } Zůstávají tam ale tvrdé mezery. Živá ukázka (2.snippet): www.doma-pohoda.cz/-hlidani-deti-liberec Proč není tvrdá mezera považována za bílý znak? Jak se to dá ošetřit? ( Nefunguje překopírování tvrdé mezery do scriptu, ani zápisy $text = Trim(preg_replace("~[^\S]+~"," ",$text)); $text = Trim(preg_replace("~\W+~"," ",$text)); // vyhází mezery, ale i ěščřž ... $text = Trim(preg_replace("~ +~"," ",$text)); |
||
DJ Miky Profil |
#2 · Zasláno: 7. 11. 2013, 13:27:43
Měl by fungovat zápis pomocí escape sekvence
\xXX , pro tvrdou mezeru je to \xA0 (A0 = desítkově 160). Takže např. ~(\s|\xa0)+~ .
|
||
nethor Profil |
#3 · Zasláno: 7. 11. 2013, 14:10:59
DJ Miky:
Díky za nasměrování, už to funguje. Použil jsem zápis: $text = Trim(preg_replace("~[\s|\xC2|\xA0]+~"," ",$text)); |
||
DJ Miky Profil |
#4 · Zasláno: 7. 11. 2013, 17:34:13
V případě, že použiješ hranaté závorky (výčet znaků), tam nesmí být svislítka (znak
| ). Takto ti RV odstraní všechna svislítka v textu.
|
||
nethor Profil |
#5 · Zasláno: 8. 11. 2013, 10:16:19
JJ, tedy
$text = Trim(preg_replace("~(\s|\xC2|\xA0)+~"," ",$text)); nebo $text = Trim(preg_replace("~[\s\xC2\xA0]+~"," ",$text));
Teď ale koukám , že mi to mrší některé znaky, např. Šalda -> � alda |
||
DJ Miky Profil |
#6 · Zasláno: 8. 11. 2013, 10:57:17
Aha, omlouvám se za mystifikaci. Tvrdá mezera je v UTF-8 kombinace 0xC2 0xA0, proto v prvním případě ještě přebývá svislítko a v druhém chybí modifikátor „
u “ (podpora UTF-8). Znak „Š“ má totiž v UTF-8 kód 0xC5 0xA0, proto se detekuje samotné 0xA0 a nahradí se za mezeru, čímž vznikne neplatná UTF-8 sekvence. Tedy:
~(\s|\xC2\xA0)+~u (v tomto případě není modifikátor „u “ nezbytně nutný, ale je lepší ho i tak uvést, když se pracuje s UTF-8 znaky)
nebo ~[\s\xc2\xa0]+~u |
||
nethor Profil |
#7 · Zasláno: 8. 11. 2013, 11:45:56
Teď to funguje skvěle.
Díky za pomoc i vysvětlení. |
||
Časová prodleva: 12 let
|
0