Strarus
14.03.2009, 19:17:27
cześć

W jaki sposób mogę zrobić coś a'la bbcode z kolorowaniem składni za pomocą highlight_string
Mephistofeles
14.03.2009, 19:27:43
Wyrażenia regularne -> i odpowiednie stylowanie elementu w zależności od zawartości.
Strarus
14.03.2009, 19:49:25
no tal i np. preg_replace i jak to zrobić? bo mam:
<?php
?>
#",### co tu? ###, $content);[/php]
chodzi mi o coś takiego jak użyłem przed chwilą

czyli [php*][/php*] bez * oczywiście

tylko nie wiem jak to napisać?
Mephistofeles
14.03.2009, 20:30:00
Nie znam się na wyrażeniach regularnych, ale musisz dla każdego elementu zrobić coś w stylu: po znalezieniu znaku $ idź aż do spacji i obejmij wszystko w <span class="variable"></span> itp.
Strarus
14.03.2009, 20:52:27
Tak, tylko w jaki sposób zrobić tą klasę? Ponieważ css to chyba nie dla php

Tutaj trzeba zastosować highlight_string(), tylko nie wiem jak!?
edit: ew. jak zrobić "to co pomiędzy
<?php
, a
?>
dodaj do zmiennej $zmienna
kamil4u
14.03.2009, 21:23:50
Nie za bardzo rozumiem probelmu:
- wyrażenie regularne, które wyciągnie wszystko pomiędzy [ph p] i [/ph p]:
Kod
#[php](.*)[\/php]#Usi
<-- nie pamiętam czy przed [ i ] nie trzeba dać przypadkiem \
- i wynik wsadzasz do funkcji highlight_string()
Do twojego kodu: w preg_replace nie można użyć funkcji PHP - poczytaj o:
preg_replace_callback" title="Zobacz w manualu PHP" target="_manual - dalej to sobie chyba poradzisz
Mephistofeles
14.03.2009, 22:34:41
LOL źle przeczytałem pierwszy post. Myślałem, że chcesz zrobić coś podobnego do highlight_string. Post wyżej zobacz - masz odpowiedź na twój problem.
Strarus
14.03.2009, 22:44:40
Hmm... już się męczę nad tym dość długo i nic mi nie przychodzi do głowy - nie mogę zrozumieć tego [b]preg_replace_callback() [/b]?
.radex
14.03.2009, 22:50:24
preg_replace_callback zamienia wartości X na Y według wyrażeń regularnych tak jak preg_replace, z tym, że w preg_replace Y jest stringiem (np. "costam \\1 foo \\2 bar"), a w preg_replace_callback wartości są przekazywane do jakiejś funkcji, której nazwa jest w tym stringu (callback), czyli np. "foo" wywoła funkcję foo(...){}
http://pl.php.net/manual/pl/function.preg-...ce-callback.phptu masz wszystko w przykładach - łatwiej zrozumieć.
Strarus
14.03.2009, 22:52:43
dzięki, troszkę mi teraz lepiej

zaraz popróbuję

edit: niestety - nie udało mi się nic napisać

jeśli ktoś by miał zbędny kod, to chętnie skorzystam
kamil4u
14.03.2009, 23:44:09
Pokaż nam swoje próby - forum jest od pomagania w rozwiązywaniu problemów, tak więc my spróbujemy Cię odpowiednio nakierować/poprawić Twoje błędy

- czekam na Twoją propozycję kodu
Strarus
15.03.2009, 00:11:22
no więc:
<?php
// this text was used in 2002
// we want to get this up to date for 2003
$text = "April fools day is [ph p]
asdasd
?>[/ph p]";
<?php
(.*?)
?>[/ph p]#", '<code>1</code>', $text);
// the callback function
function replace_php($matches)
{
}
"#[ph p]
<?php
(.*?)
?>[/ph p]#",
"replace_php",
$text);
?>
i się pokazuje:
April fools day is [ph p] asdasd [/ph p]
April fools day is [ph p] asdasd [/ph p]
proszę bardzo
.radex
15.03.2009, 10:17:26
Cytat(Strarus @ 15.03.2009, 00:11:22 )

i się pokazuje:
April fools day is [ph p] asdasd [/ph p]
April fools day is [ph p] asdasd [/ph p]
proszę bardzo

bo wymagasz, żeby zamieniało
[ph p]
<?php
cokolwiek
?>
[/ph p]
na <code>cokolwiek</code>
a nie powinno być przypadkiem
[ph p]cokolwiek[/ph p]
hm?
Strarus
15.03.2009, 14:03:44
no więc nakodziłem coś takiego:
<?php
$code = "test [ph p]echo 'hello world!';[/ph p] test";
function bbcode_php($code) {
$wzorzec = "#[ph p](.*?)[/ph p]#";
$code = '<div style="border: 1px green solid">'.$code[1].'</div>';
}
}
$output = bbcode_php($code);
?>
ładnie się wyświetla ale nie mogę dodać funkcji highlight_string() bo wtedy wszystko się wali ! jak teraz dodać kolorowanie?
erix
15.03.2009, 14:04:01
Strarus
15.03.2009, 14:08:14
<?php
$code = "test [ph p]echo 'hello world!';[/ph p] test";
function bbcode_php($code) {
$wzorzec = "#[ph p](.*?)[/ph p]#";
$code = '<div style="border: 1px green solid">'.highlight_string($code[1]).'</div>';
}
}
$output = bbcode_php($code);
?>
erix
15.03.2009, 14:13:53
A co konkretniej ten kod kisi? IMHO nie powinno się to wywoływać rekurencyjnie...
Strarus
15.03.2009, 14:17:46
No więc gdzie to dać?

Bo to najważniejsze
.radex
15.03.2009, 14:52:07
no coś w tym stylu:
function foo($data)
{
return pokoloruj_i_co_tam_jeszcze_chceta(...);
}
preg_re..callback("[ph ... [/ph p]", "foo", $zmienna_z_kodem_w_bbcode);
Strarus
15.03.2009, 15:01:35
Trochę Cie nie zrozumiałem ale dzięki temu wpadłem na coś takiego:
<?php
$code = "test [ph p]< ? php echo 'hello world!'; ? >[/ph p] test";
function bbcode_php($code) {
$wzorzec = "#[ph p](.*?)[/ph p]#";
$code = '<div style="border: 1px green solid">'.$zmienna.'</div>';
}
}
$output = bbcode_php($code);
?>
Niestety teraz wyświetla się tak:
<?php echo 'hello world!'; ?> test 1 test

ps. tylko ta 1 jest w zielonej ramce
.radex
15.03.2009, 15:14:35
<?php
$code = "test [ph p]< ? php echo 'hello world!'; ? >[/ph p] test";
function bbcode_php($code) {
$code = '<div style="border: 1px green solid">'.$zmienna.'</div>';
}
return $code;
}
//$output = bbcode_php($code);
$wzorzec = "#[ph p](.*?)[/ph p]#";
?>
coś w tym stylu. powinno działać.
(tylko uporządkuj to ładnie, ja to tylko tak na szybko)
Strarus
15.03.2009, 15:16:56
dzięki bardzo

w razie czego napisze jeszcze

edit: no niestety efekt identyczny z moim

może jakaś inna metoda

??
.radex
15.03.2009, 15:30:26
Zapomniałem, że przed nawiasami kwadratowymi stawiamy backslash (no chyba, że chcemy uzyskać to co dają nam one bez backslashy).
wzorzec powinien wyglądać tak: "#\[ph p\](.*?)\[/ph p\]#"
Strarus
15.03.2009, 15:31:36
a ja zapomniałem wspomnieć, że to poprawiłem

niestety to nie był problem

nadal jest w takiej dziwnej formie ten tekst...
bim2
15.03.2009, 16:27:57
nie, źle zrozumiałeś.
<?php
function phphigh($math)
{
//...
}
function bbcode_php()
{
}
?>
Strarus
15.03.2009, 16:45:48
a co ma robić phphigh ? i w ogóle jak to ma się wykonywać?
bo na chwilę obecną mam coś takiego:
<?php
$code = "test [ph p]echo 'hello world!';[/ph p] test";
function bbcode_php($code) {
$wzorzec = "#[ph p](.*?)[/ph p]#";
$code = '<div style="border: 1px green solid"><?php<br/> '.$code[1].' <br/>?></div>';
}
}
$output = bbcode_php($code);
?>
składniowo jest tak jak trzeba (tekst niżej border z kodem niżej tekst) ale nie ma highlight
bim2
15.03.2009, 21:09:27
Czytaj i analizuj.
<?php
function phphigh($math)
{
//...
}
function bbcode_php()
{
return preg_replace_callback($wzorzec, 'phphigh', $code);
}
?>[/php]
do phphight wrzucasz funkcje kolorujaca i zwracasz pokolorowany kod, a w bbcode_php tylko preg_replace_callback
Strarus
17.03.2009, 08:20:09
napisałem coś takiego i nic się nie pokazuje na stronie (biała)
<?php
$code = "test [ph p]echo 'hello world!';[/ph p] test";
function phphigh($code) {
$code = '<div style="border: 1px green solid"><?php<br/> '.$code[1].' <br/>?></div>';
}
return ($code); // I z tym i bez tego nie działa
}
function bbcode_php() {
$wzorzec = "#[ph p](.*?)[/ph p]#";
}
$output = bbcode_php($code);
?>
bim2
17.03.2009, 09:30:22
Nie działa czyli co się dzieje? pomyśl czemu nie koloruje? Nie wrzuciłeś funkcji kolorującej do php_high()

Jak dobrze wrzucisz, wszystko będzie Ok
Strarus
17.03.2009, 14:42:27
Nie działa w ogóle, to znaczy wyświetla się biała strona. Chciałem sprawdzić czy w ogóle mi takie rozwiązanie zadziała, a potem wrzucić hihglight. Teraz też nie działa, oto kod:
<?php
$code = "test [ph p]echo 'hello world!';[/ph p] test";
function phphigh($code) {
$code = '<div style="border: 1px green solid"><?php<br/> '.$kod.' <br/>?></div>';
}
return ($code); // I z tym i bez tego nie działa
}
function bbcode_php() {
$wzorzec = "#[ph p](.*?)[/ph p]#";
}
$output = bbcode_php($code);
?>
jak zlikwiduję < i > i dam kod hello world pomiędzy <?php ?> to też białą strona...
bim2
17.03.2009, 18:24:30
A jak przekazujesz do funkcji bbcode_php() tekst który chcesz przeparsować?

Czegoś ci w niej brakuje ;]
Strarus
17.03.2009, 19:47:51
Już poprawiłem i teraz się wyświetla ale wyświetla się coś takiego:
test [ph p] echo 'hello world!'; [/ph p] test // [ph p] jest bez spacji
kod:
<?php
$code = "test [ph p] echo 'hello world!'; [/ph p] test";
function phphigh($code) {
}
return ($code);
}
function bbcode_php($code) {
$wzorzec = "#/[ph p](.*?)/[/ph p]#";
}
$output = bbcode_php($code);
?>
bim2
17.03.2009, 20:01:15
Dodaj może do wyrażenia regularnego modyfikator i oraz s
Strarus
17.03.2009, 20:26:12
<?php
$wzorzec = "#[ph p](.*?)/[/ph p]#s";
?>
reszta jak wcześniej i nadal nie ma poprawy, znaczy pokazuje się kod php i dalsza część tekstu, kod jest nie pokolorowany i poprzedza wszystko...
bim2
17.03.2009, 21:27:36
znajdź błąd w tym "*?)/[/php"

Pamiętaj że "[" to specjalne znaczniki

No i / nic nie robi :]
Strarus
18.03.2009, 15:46:39
przy takim kodzie:
<?php
$code = "test [ph p]<?php echo 'hello world!'; ?>[/ph p] test";
function phphigh($code) {
}
return ($code);
}
function bbcode_php($code) {
$wzorzec = "#[ph p](.*?)[/ph p]#s";
}
$output = bbcode_php($code);
?>
Składnia się koloruje ale jest w takiej postaci:
<?php echo 'hello world!'; ?> test 1 test
już nie mam pomysłów...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.