ďťż
Podstrony
|
telcocafeDodaję funkcję kolorowania składni do skryptu. Postanowiłem automatycznie zamieniać kod wewnątrz <pre> i <code> na encje. Może to nie najlepszy sposób, ale ręczna zamiana kodu na encje i późniejsza edycja takiego jest uciążliwa.Przykład:<pre> <b>Jakiś tam kod</b> <pre>inny znacznik PRE</pre> </pre> Dalsza część artykułu <pre><i>Kolejny przykład kodu</i></pre> Oczywiście zawartość <pre> ma być widoczna jako kod źródłowy, więc < i > trzeba zamienić na < i > Kod, który stosuję:$tekst = preg_replace( array( '#<(pre)([^>]*)>(.*?)</pre>#sie', '#<(code)([^>]*)>(.*?)</code>#sie' ), '"<\\1\\2>".htmlspecialchars("\\3",0)." </\\1>"', $tekst); Zastosowałem kwantyfikator niezachłanny .*? jednak to wyrażenie regularne polegnie na tym przykładzie, ponieważ wewnątrz <pre> znajduje się kolejny znacznik <pre> (który już powinien zostać zamieniony na encje, ale tak się nie dzieje). Do edycji kodu stosuję podobny kod, lecz htmlspecialchars_decode() zamiast htmlspecialchars(). Nie mogę użyć kwantyfikatora zachłannego .* gdyż takich przykładów (bloków) <pre> może być obok siebie dużo w artykule. Gdyby był tylko 1, nie byłoby problemu. Wiem, jak rozwiązać problem przy użyciu standardowych funkcji do ciągów tekstowych - str_* - jednak trzeba pisać znacznie więcej kodu. Czy istnieje takie wyrażenie regularne, które: 1. Znajdzie wszystkie <pre> i <code> i zamieni w środku kod na ENCJE 2. Nie będzie wyszukiwać <pre> i <code> wewnątrz innych <pre> i <code>. PS. Znak ' jest zamieniany na /' mimo że opcja magic_quotes jest wyłączona. geshi, dp.syntaxhighlighter z gotowych, popatrz jak np. w skryptach for rozwiązany jest tag "code". Najlepsze podejście do programowania to KISS, a nie wynajdywanie koła na nowo w formie kanciastej z ołowiu. A jak piszesz o kwantyfikatorach i liczysz na odpowiedzi to powinieneś to wrzucić co najmniej na forum.php.pl... choć chyba tam też już mało kto chce Ciebie czytać ;) Użytkownik Riklaunim edytował ten post 12 luty 2010, 23:51 |
|||
Sitedesign by AltusUmbrae. |