Autor | Zpráva | ||
---|---|---|---|
DarkMeni Profil |
#1 · Zasláno: 28. 6. 2011, 15:31:17
Zdravím, nemůžu přijít na to jak vymazat všechny html značky uvnitř úvozovek, aby tam nebyly vůbec.
ZKoušel jsem toto: $string = preg_replace("/\"<.*?>\"/is","",$string); Ale nepomohlo to. Jak se můžu zbavit jen html značek ale text tam nechat? Například z tohoto: "Text... <html-značka hromada=atributu>Text2...</html-značka> Text3..." Udělat toto: "Text... Text2... Text3..." (Koukám že tady na fóru v ukázce kódu to nějak de, to co by se normálně mimo úvozovky vybarvilo je v úvozovkách v klidu) |
||
__construct Profil |
#2 · Zasláno: 28. 6. 2011, 15:33:08
DarkMeni:
A skúšal si strip_tags ?
|
||
DarkMeni Profil |
#3 · Zasláno: 28. 6. 2011, 15:50:05
Buď tu funkci špatně chápu nebo je v mém případě k ničemu, zkusim dát trochu lepší příklad:
Text... <html-značka>Text...</html-značka>"Text1... <html-značka hromada=atributu>Text2...</html-značka> Text3..." <html-značka>Text...</html-značka> Přepsat na: Text... <html-značka>Text...</html-značka>"Text1... Text2... Text3..." <html-značka>Text...</html-značka> Takže mimo úvozovky můžou být, ale v úvozovkách ne. Možná by se to dalo řešit rosekáním do pole (explode) po úvozovkách, ale jak pak poznám co bylo, a co ne v úvozovkách, i když, šlo by to ale dost složitě (až pak by sem použíl strip_tags). Snad existuje jednodušší způsob. |
||
__construct Profil |
#4 · Zasláno: 28. 6. 2011, 16:25:58
|
||
DarkMeni Profil |
#5 · Zasláno: 28. 6. 2011, 17:05:06
Toto:
$string = preg_replace("/[^<]\"(.*?)\"[^>]/is","<span style=\"color: gray;\">\"".strip_tags("$1")."\"</span>",$string); Nejspíš mam špatně výraz (chtěl jsem aby to odstranilo html tagy z úvozovek, které nejsou součástí html tagu, a nějak to nefunguje), ale i kdyby to fungovalo tak výsledek bude stejný protože strip_tags dostane "$1" a to taky vrátí. Jestli jsi to myslel jinak, tak jak? |
||
Tori Profil |
#6 · Zasláno: 28. 6. 2011, 18:07:53 · Upravil/a: Tori
DarkMeni:
[#5] myslím nefunguje proto, že nedřív se druhý parametr vyhodnotí (=odstraní tagy z řetězce „$1“) a až pak se provádí nahrazování. |
||
__construct Profil |
#7 · Zasláno: 29. 6. 2011, 09:48:30
DarkMeni:
Myslel som to takto nejako: preg_replace('/"(.+?)"/e', "strip_tags('\\1')", $string); |
||
DarkMeni Profil |
#8 · Zasláno: 30. 6. 2011, 13:47:04
Ano to je ono, děkuji.
|
||
DarkMeni Profil |
#9 · Zasláno: 30. 6. 2011, 20:21:17 · Upravil/a: DarkMeni
Mám ještě jeden problém, tentokrát už snad čistě jen s výrazem, jde o to že zvýrazňuju některé html značky a když dojde na atributy, tak už tam nějaké budou, třeba class, kvůli zvýraznění html značek, a potom to vypadá nějak takto:
<span class="highlight-html"><input type=<span class="highlight-quote">"e;text"e;</span> ... ></span> Takže vybarvit potřebuju jen to co je mezi < a > ale není mezi < a >. Nějak jsem to zkoušel ale dopadlo to špatně. (Buď to s sebou vybarvilo i ty které jsou mezi < nebo > a nebo to nevybarvilo vůbec nic, tento kód nevybarví vůbec nic: //$code je definován $attributes = "width|height|style|title|alt|src|border|colspan|rowspan|rules|class|id|name|href|content|http-equiv|type|"; $attributes.= "onclick|onmouseup|onmousedown|onmouseover|onmouseout|onmousemove|onpsesskey|onkeyup|onkeydown|onload|onchange"; $code = preg_replace("/((<[^<>].*?)(".$attributes.".*?=?)*(.*?[^<>]>))/i","$2<span class=\"highlight-html-attribute\">$3</span>$4",$code); Čekal jsem že to udělá něco jako: Najde atributy které jsou mezi < a > ale zároveň nejsou v < nebo >. S výrazy si ještě moc nerozumim, takže kdyby se našel někdo chytrý a nějak mi poradil tak mu budu vděčný. |
||
Tori Profil |
#10 · Zasláno: 2. 7. 2011, 00:20:11 · Upravil/a: Tori
DarkMeni:
A nebyl by jednodušší takovýto postup? 1. Nahradit < a > entitami (nebo jinou sekvencí znaků), 2. vyhledat a zvýraznit všechny atributy s hodnotami, ("~(\w+)=(('[^']+')|(\"[^\"]+\")|([\s+]))\s?~i" + callback) 3. vyhledat a zvýr. původní tagy (najdou se podle entit) |
||
DarkMeni Profil |
#11 · Zasláno: 3. 7. 2011, 17:33:06
Tak ve výrazech se ještě asi moc nevyznám (callback?) Ale ta 1. s nějakou sekvencí znaků, to je dobrej nápad, díky!
|
||
Tori Profil |
#12 · Zasláno: 3. 7. 2011, 23:10:46
DarkMeni:
callback = odkaz na funkci, kterou má preg_replace volat pokaždé, když najde odpovídající kus textu. Předá jí ten atribut s hodnotou, funkce doplní zvýraznění a vrátí nový kus textu, kterým se nahradí ten původní. Dá se použít preg_replace + modifikátor e v reguláru, nebo preg_replace_callback. Pokud nechcete dělat odlišné zvýrazňování pro různé skupiny atributů (JS události, ostatní HTML, specifika šablon.systému apod.), tak stačí první varianta. |
||
Časová prodleva: 13 let
|
0