Autor | Zpráva | ||
---|---|---|---|
HGD Profil |
#1 · Zasláno: 4. 6. 2009, 20:28:28
jaký je rozdíl mezi funkcemi:
ereg_replace preg_replace str_replace |
||
AM_ Profil |
#2 · Zasláno: 4. 6. 2009, 20:38:50
ereg_replace - nahrazení pomocí regulárního výrazu standardu POSIX - ustupuje se od toho, jelikož to není moc dobře napsané a má to mnohem méně možností než:
preg_replace - nahrazení pomocí regulárního výrazu se syntaxí dle jazyka PERL str_replace - prosté nahrazení konkrétního podřetězce za jiný reg. výraz je jakýsi "textový vzorec", kterým se dá vyjádřit např. "všechny části textu ve formátu 4 písmena, 2 čísla" - složitějšími výrazy se dá zobecnit třeba zápis e-mailové adresy a pak třeba v textu všechny nahradit odkazem. |
||
Nox Profil |
#3 · Zasláno: 4. 6. 2009, 20:49:20
Jen minidoplnění AM_ - pokud postačí použít str_replace, tak použij to, bude to mnohem rychlejší
|
||
HGD Profil |
#4 · Zasláno: 5. 6. 2009, 00:09:00
tak když už sem si to tu založil...
mám kód: $text=preg_replace("#\[q\](.+)\[/q\]#","<q>\\1</q>","[q]citace[/q]"); ale výsledek z toho leze takovej, že sice v HTML je <q>citace</q> ale na stránce se interpretuje jako "citace" |
||
AM_ Profil |
#5 · Zasláno: 5. 6. 2009, 00:38:03
HGD
ano. očekáváš jiné chování? |
||
HGD Profil |
#6 · Zasláno: 5. 6. 2009, 10:38:04
čekam že na stránce se vypíše text bez uvozovek, asi to chápu blbě jak to mam napsaný.
Poradíte jak na to? |
||
AM_ Profil |
#7 · Zasláno: 5. 6. 2009, 11:43:00
„čekam že na stránce se vypíše text bez uvozovek, asi to chápu blbě jak to mam napsaný.“
„Poradíte jak na to?“ ano, chápeš to blbě :) <q> je tag označující citaci a část prohlížečů to interpretuje tak, že dá text do uvozovek, viz http://www.jakpsatweb.cz/html/text.html#q na tvém místě bych ten replace napsal tak, aby se to nenahrazovalo <q>, ale třeba <span> s nějakou třídou, který si už nastyluješ podle libosti. |
||
panther Profil |
#8 · Zasláno: 5. 6. 2009, 11:47:17
AM_
„na tvém místě bych ten replace napsal tak, aby se to nenahrazovalo <q>, ale třeba <span> s nějakou třídou, který si už nastyluješ podle libosti.“ myslíš, že je dobře překrucovat si nesémantické značky obrazu svému? Chci-li citovat, stejně dám tex do uvozovek. |
||
AM_ Profil |
#9 · Zasláno: 5. 6. 2009, 12:13:29
panther
„Chci-li citovat, stejně dám tex do uvozovek.“ ->„čekam že na stránce se vypíše text bez uvozovek“ takže HGD zřejmě nechce ;) „myslíš, že je dobře překrucovat si nesémantické značky obrazu svému?“ tak nabídni jiné řešení, jak ty uvozovky odstranit, já jiné neznám, proto jsem poukázal na toto. |
||
panther Profil |
#10 · Zasláno: 5. 6. 2009, 12:54:23
AM_
„takže HGD zřejmě nechce ;) “ tak to se omlouvám, to jsem přehlédl.. Chyba. |
||
HGD Profil |
#11 · Zasláno: 5. 6. 2009, 13:06:58
takže asi bude nejlepší používat tag <blockquote> ?
|
||
panther Profil |
#12 · Zasláno: 5. 6. 2009, 13:12:38
HGD
„takže asi bude nejlepší používat tag <blockquote> ?“ tag „<blockquote>“ je blokový, takže pokud nechceš citovat uprostřed odstavce, klidně jej užij. |
||
HGD Profil |
#13 · Zasláno: 5. 6. 2009, 13:30:01
jj, už to tam mam a bude to nejlepší asi
a ještě jeden dotázek, mam kód: function quote($tag){ preg_match('#\"(.+)\"#',$tag,$match); $Q="<blockquote><strong>$match[1] napsal:</strong><br>"; return $Q; } $text=preg_replace_callback("#<blockquote \"(.+)\">#",quote,$text); ale hází: Warning: preg_match() expects parameter 2 to be string, array given |
||
HGD Profil |
#14 · Zasláno: 5. 6. 2009, 13:36:09
Dobrý už to mam :) Sice pořád nemů pochopit fci preg_replace_callback ale funguje:
function quote($tag){ $Q="<blockquote><strong>$tag[1] napsal:</strong><br>"; return $Q; } |
||
AM_ Profil |
#15 · Zasláno: 5. 6. 2009, 14:01:47
Název callback funkce musí být předán jako řetězec, nikoli identifikátor, takže parametr "quote" bude v uvozovkách.
navíc $Q="<blockquote><strong>$tag[1] napsal:</strong></blockquote>"; odřádkovat za blokovým elementem nemusíš (proto je blokový :) ), ale musíš jej ukončit. |
||
HGD Profil |
#16 · Zasláno: 5. 6. 2009, 14:27:33
ale ale vždyt mi to funguje, ikdyž ten parametr neni v uvozovkách...
a chybu to házelo ve funkci preg_match() -> tohle je jenom malá úprava ve výpisu, konec tagu už tam je... ;) |
||
AM_ Profil |
#17 · Zasláno: 5. 6. 2009, 15:13:44
Jo, teď vidím tu hrůzu. Vysvětlím, jak preg_replace_callback funguje:
$text=preg_replace_callback("#<blockquote \"(.+)\">#","quote",$text); ty uvozovky si tam dopiš, nedefinované konstantě se implicitně jako hodnota přiřadí její název, takže PHP tyhle chyby toleruje, ale vrací notice (nebo warning, teď nevím). Takže: 1. funkce porovná řetězec $text se zadaným regulárním výrazem 2. pro každý nalezený podřetězec odpovídající reguláru zavolá: quote($match) 3. výsledek funkce quote dosadí to $text za příslušný nalezený text, tedy proto "replace". Takže v callbacku už žádné porovnávání regulárem neděláš, už pracuješ jen s nalezeným textem. |
||
HGD Profil |
#18 · Zasláno: 5. 6. 2009, 15:28:40
AM_ díky moc!!! Takle sem to nikde vysvětlený nenašel na netu ;)
a jestli můžu v souvislosti ještě jeden dotaz :) Potřebuju do stránky vypsat kód, jedno jestli HTML, CSS nebo PHP atd... a nevim jak to opravit aby to fungovalo. Mám: $text=preg_replace_callback("#\[code\](.+)\[/code\]#","code",$text); function code($tag){ $C=htmlspecialchars($tag[1]); $C="<code>$C</code>"; return $C; } ale stejně se ten kód vykoná :( |
||
AM_ Profil |
#19 · Zasláno: 5. 6. 2009, 15:43:04
To je dost divné řešení, tady se vykašli na preg_replace_callback, nejdřív si celý řetězec převeď pomocí htmlspecialchars a pak použij prostý preg_replace...
|
||
AM_ Profil |
#20 · Zasláno: 5. 6. 2009, 15:43:45
jo, teď vidím, že by to vlastně šlo u toho prvního, nevím, na co tam potřebuješ callback :) ten se používá na složité věci, které nejde do reguláru zapsat.
|
||
Časová prodleva: 3 dny
|
|||
HGD Profil |
#21 · Zasláno: 8. 6. 2009, 10:56:44
když mam v kodu
$text=preg_replace("#\[code\]([^\<br \/\>])\[/code\]#","<code>\\1</code>",$text); |
||
AM_ Profil |
#22 · Zasláno: 8. 6. 2009, 11:59:00
myslímže modifikátor "s" - první parametr replace bude "#\[code\]([^\<br \/\>])\[/code\]#s"
|
||
Časová prodleva: 15 let
|
0