Autor | Zpráva | ||
---|---|---|---|
Vanama Profil |
#1 · Zasláno: 7. 12. 2011, 22:34:17 · Upravil/a: Vanama
Zdravím,
peru se teď s jedním výrazem a nemůžu to rozlousknout. Regulerní výrazy mi prostě nejdou. Potřeboval bych najít všechny asi hex znaky ve stringu - např. \x26, \x3d, \x22, ... - a nahradit je "normálním" znakem. Na převod mi funguje chr(hexdec('\x26'));, ale nevím jak to udělat regulerním výrazem všude ve stringu. Napsal jsem toto, ale něco je tam stále špatně. $data = preg_replace( '~(\x..)~', 'chr(hexdec($1))', $data); echo preg_last_error(); |
||
Majkl578 Profil |
#2 · Zasláno: 8. 12. 2011, 01:07:36 · Upravil/a: Majkl578
Vanama:
„ale něco je tam stále špatně“ Jistěže. 1) Potřebuješ preg_replace_callback, ne preg_replace. 2) Při splnění 1) by ti to nefungovalo - vracel by se ten kus kódu jako string. Řešil by to příznak e (eval), ale to není vhodné.
Funkční by to bylo za použití nahrazení callbackem takto: $data = '\x26\x3d\x22'; $data = preg_replace_callback('~\\\\x(..)~', function ($m) { return chr(hexdec($m[1])); }, $data); echo $data; |
||
Vanama Profil |
#3 · Zasláno: 8. 12. 2011, 09:13:34
Tuhle funkci jsem taky zkoušel, ale evidentně byla chyba v tom regulárním výrazu. Všude se sice dočtu jak psát regulární výrazy, ale nikde jsem se nedočetl co použít na začátku. Z různých příkladů někde používají na začátku a na konci # nebo / a nebo jak to mám já ~.
Díky moc, vaše řešení je funkční. |
||
Časová prodleva: 3 dny
|
|||
Majkl578 Profil |
#4 · Zasláno: 11. 12. 2011, 03:24:27 · Upravil/a: Majkl578
Vanama:
„Z různých příkladů někde používají na začátku a na konci # nebo / a nebo jak to mám já ~.“ Ono je to totiž jedno. Podle dokumentace to smí být cokoliv kromě alfanumerických znaků a zpětného lomítka. Nicméně nejčastnější bývá lomítko ( / ), hash (# ), tilda (~ ) nebo zavináč (@ ). Obecně se nehodí takové znaky, které ve výrazu používáš (např. zpětné lomítko pro výraz na URL), protože je to kontraprodutivní - musí se navíc escapovat.
|
||
Časová prodleva: 12 let
|
0