Autor | Zpráva | ||
---|---|---|---|
Charlie Profil |
#1 · Zasláno: 2. 7. 2005, 22:38:18
Zdravím všechny,
nedávno jsem zde na diskusi představil můj text2html converter Textization (na název nehleďte). Parsuje validně odstavce i seznamy, a to při jakémkoli nevalidním vstupu (snad). Problém nastává, když chci parsovat jednotlivé řádky a nahrazovat v nich nějaké znaky nějakými html tagy. Mám takovouhle proměnnou: $tags = array( Chtěl bych nahradit třeba "**text**" za "<strong>text</strong>". Tagy nahrazuji v této části scriptu: foreach ($tags as $symbol => $tag) { Problém nastává, když je vstup nevalidní, pak to háže i nevalidní výstup. Například z **//text**// tak to převede do <strong><em>text</strong></em> a to je nevalidní. Teď mám dvě možnosti. Buď budu konvertovat jen validní vstup, nebo to musím nějak automaticky zvalidnit. Druhá možnost se mi jeví jako lepší. Řešili jste již někdy něco podobného? |
||
Charlie Profil |
#2 · Zasláno: 4. 7. 2005, 01:29:49
Tak jsem již vymyslel něco, ale stále to nevrací úplně validní kód:
$this->op = ""; Jak vidíte, tak to ještě není úplně validní, pokusím se s tím něco udělat a pak to sem zas hodím. |
||
Časová prodleva: 4 dny
|
|||
printf-jinde Profil * |
#3 · Zasláno: 7. 7. 2005, 15:24:19
Jo, podobnou věc jsem řešil ale asi hrozně nešikovně:
prostě jsem procházel text znak po znaku a začínající tagy ukládal do zásobníku, ukončit šlo jedině tag, který je poslední v zásobníku, načež se ze zásobníku vymazal. Nepárové tagy se do zásobníku neukládají, ale já jsem s takovými nepracoval. Na konci textu se projel zásobník a ukončily se všechny neukončené tagy (tedy ty které zůstaly v zásobníku). Zásobník se dá velice snadno udělat s funkcemi pro práci s polem. Asi to nejí nejelegantnější řešení, ale zato je IMHO spolehlivé. |
||
Charlie Profil |
#4 · Zasláno: 7. 7. 2005, 17:55:37
printf-jinde, však já jsem tam také implementoval zásobník. je to proměnná "op".
|
||
printf-jinde Profil * |
#5 · Zasláno: 7. 7. 2005, 22:04:38
nojo, já jsem ten kód moc neprohlížel :-))
|
||
Časová prodleva: 20 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0