Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> kolorowanie jedynie kodu PHP.
id4
post 15.01.2004, 22:36:05
Post #1





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

Ostrzeżenie: (0%)
-----


Witam wszystkich tak licznie zaglądających na ten wątek smile.gif

Na tym forum odnalazłem kilka odpowiedzi, ale niestety nie spełniły one moich oczekiwań. W dodatku z wyrażeń regularnych jestem jeszcze noga, więc postanowiłem napisać tego posta.

Mój problem polega na tym że:
1. Mam w bazie tekst, w którym jest zawarta np. funkcja czy jakikolwiek inny skrypt pomiędzy <?php a ?>.
2. Chciałbym osiągnąć to, że dane te byłyby jakoś rozróżnione tak, by kolorował składnie funkcji ale nie opis jej powyżej. Potrafię zrobić coś podobnego, ale niestety tekst opisujący funkcję jest w czcionce, której znaki mają jednakową szerokość a ja muszę mieć to jak w reszcie serwisu Verdaną.

Pod spodem podaję przykładowy kod, który mam w bazie danych.

Kod
Tutaj jest tekst opisujący daną funkcję. Pod spodem chciałbym, aby była ona kolorowana i by tylko ona była w czcionce 12px o stałej szerokości znaków, natomiast czcionka ta, by miała 10px i była nią na przykład Verdana w kolorze czarnym.

<?php

function cutText($text,$end){

    if(strlen($text)>$end){

        $wynik=substr($text,0,$end);

        while(!($znak=="." || $znak=="," || $znak==" ")){

            $znak=substr($text, $end, 1);

            if(!($znak=="." || $znak=="," || $znak==" "))

                $wynik=$wynik.$znak;

            $end++;

        }

        $znak="";

        $text=$wynik."...";

    }

    return $text;

}

?>


Jedyny efekt jaki udało mi się uzyskać to:

[php:1:c0f6c610e7]
Tutaj jest tekst opisujący daną funkcję. Pod spodem chciałbym, aby była ona kolorowana i by tylko ona była w czcionce 12px o stałej szerokości znaków, natomiast czcionka ta, by miała 10px i była nią na przykład Verdana w kolorze czarnym.
<?php
function cutText($text,$end){
if(strlen($text)>$end){
$wynik=substr($text,0,$end);
while(!($znak=="." || $znak=="," || $znak==" ")){
$znak=substr($text, $end, 1);
if(!($znak=="." || $znak=="," || $znak==" "))
$wynik=$wynik.$znak;
$end++;
}
$znak="";
$text=$wynik."...";
}
return $text;
}
?>[/php:1:c0f6c610e7]

I chodzi mi właśnie o tą czcionkę, która jest powyżej funkcji - jest paskudna. Bardzo proszę o pomoc wyjadaczy wyrażeń regularnych smile.gif
Go to the top of the page
+Quote Post
spenalzo
post 15.01.2004, 22:43:56
Post #2





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


[manual:890d67c4e4]highlight_string[/manual:890d67c4e4]


--------------------

Go to the top of the page
+Quote Post
id4
post 15.01.2004, 22:46:13
Post #3





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

Ostrzeżenie: (0%)
-----


Witam.
Właśnie tej funkcji używam do pokolorowania, ale koloruje mi cały tekst a nie tylko określony przez znaczniki <??>.
W każdym razie dziękuję.
Go to the top of the page
+Quote Post
menic
post 15.01.2004, 22:49:28
Post #4





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

Ostrzeżenie: (0%)
-----


Najpierw pobierasz wszystko między <?php a ?> za pomocą prega a potem highlight_string winksmiley.jpg


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
spenalzo
post 15.01.2004, 22:51:42
Post #5





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Mi takie coś
[php:1:63ecd5fc01]<?php
$txt="Ala ma <? kota(); ?> a kot ma <?php ala(13); ?>";
highlight_string($txt);
?>[/php:1:63ecd5fc01]
kloloruje tekst dokładnie tak:
[php:1:63ecd5fc01]Ala ma <? kota(); ?> a kot ma <?php ala(13); ?>[/php:1:63ecd5fc01]


--------------------

Go to the top of the page
+Quote Post
id4
post 15.01.2004, 22:58:33
Post #6





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

Ostrzeżenie: (0%)
-----


Jest dokładnie tak jak mówisz - ale nie rozumiesz mnie ...
Tekst: Ala ma oraz a kot ma muszą być czcionką Verdaną, a nie taką samą jak jest pokolorowany kod php.
WG. mnie, to trzeba by najpierw wyciągnąć sam string z pomiędzy <??>, zapodać go przez highlight_string i uzupełnić tekst, który nie jest w znacznikach <??>.
I właśnie to jest dla mnie problem, nad którym siedzę od kilku godzin ...
Go to the top of the page
+Quote Post
rzseattle
post 15.01.2004, 23:01:22
Post #7





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Cytat
Najpierw pobierasz wszystko między <?php a ?> za pomocą prega a potem highlight_string winksmiley.jpg

Maly OT ale jak chcesz jednoczesnie pobierac wyrazenia i je umieszczac pokolorowane?? Z wyrazen jestem noga ale w manualu nie widzialem przykladu ktory umozliwial by cos takiego [php:1:7cd91173b2]<?php
$string = ereg_replace('four', ucfirst($znaleziony_strong), $string);
// nie zamieni wszystkich four na Four
?>[/php:1:7cd91173b2]
Wiec pytam jak? Moze sie mi w przyszlosci przyda winksmiley.jpg

update - juz chyba nie OT smile.gif


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
menic
post 15.01.2004, 23:09:17
Post #8





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

Ostrzeżenie: (0%)
-----


Ale ja mówiłem o [manual:b0e191226c]preg_match[/manual:b0e191226c]() A on zwraca wynik w formie tablicy winksmiley.jpg


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
rzseattle
post 15.01.2004, 23:17:27
Post #9





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

Ostrzeżenie: (0%)
-----


hmm [manual:530a88a53c]ereg[/manual:530a88a53c] tez zwraca wynik w formie tablicy a ja dalej nie wiem jak to wszystko pozamieniac. Skad masz widziec gdzie co jest? Mozna oczywicie zastosowac jakies wyuzdane sposoby - najpierw wydzielic do tablicy potem [manual:530a88a53c]split[/manual:530a88a53c] tekstu i przetasowac te dwie tablice - ale dalej nie wiem jak to zrobic prosciej. ?


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
id4
post 15.01.2004, 23:23:49
Post #10





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

Ostrzeżenie: (0%)
-----


Witam.

A czy można użyć takiej funkcji by pozbyć się <code> i </code> z tekstu? Bo coś mi takie coś nie chce banglać. Zarówno <code> jak i </code> tworzą się podczas wykonywania funkcji highlight_string.

[php:1:b095813f50]<?php
function phpText($text){
$text=highlight_string($text);
$text=eregi_replace("<code>","",$text);
$text=eregi_replace("</code>","",$text);
return $text;
}
?>[/php:1:b095813f50]
Go to the top of the page
+Quote Post
rzseattle
post 15.01.2004, 23:29:09
Post #11





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

Ostrzeżenie: (0%)
-----


zeby nie wyswietlal ustaw drugi parametr w highlight_string winksmiley.jpg

pozatym w tym przypadku uzywaj
[php:1:69936d3046]<?php
$string = str_replace(array('<code>','</code>'), "", $string); //szybsze niz wyrazenia

?>[/php:1:69936d3046]


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
FiDO
post 16.01.2004, 01:19:56
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Cytat
WG. mnie, to trzeba by najpierw wyciągnąć sam string z pomiędzy <??>, zapodać go przez highlight_string i uzupełnić tekst, który nie jest w znacznikach <??>.

Cytat
Maly OT ale jak chcesz jednoczesnie pobierac wyrazenia i je umieszczac pokolorowane??

Prosze bardzo smile.gif
  1. <?php
  2. echo preg_replace_callback(&#092;"!<?php.*?>!sU\", create_function( '$m', 'return \"<br />\". highlight_string($m[0],true) .\"<br />\";'), $test);
  3. ?>

Zmienna <b>$test</b> zawiera tekst do podmiany, koloruje tylko to co jest miedzy <b><?php</b> a <b>?></b>

Cytat
Z wyrazen jestem noga ale w manualu nie widzialem przykladu ktory umozliwial by cos takiego
  1. <?php
  2. $string = ereg_replace('four', ucfirst($znaleziony_strong), $string);
  3. // nie zamieni wszystkich four na Four  
  4. ?>

Wiec pytam jak? Moze sie mi w przyszlosci przyda winksmiley.jpg

Slabo szukales smile.gif (hint: preg_replace" title="Zobacz w manualu PHP" target="_manual - wzmianka o przelaczniku <b>e</b>)
  1. <?php
  2. $string = preg_replace('/four/e', &#092;"ucfirst('0')\", $string);
  3. ?>



PS. php P. to nie forum na taki topic, wiec lecimy tutaj winksmiley.jpg


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
rzseattle
post 16.01.2004, 01:54:43
Post #13





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Cytat
Slabo szukales (hint: preg_replace - wzmianka o przelaczniku e)

FiDO tylko taki przyklad dalem winksmiley.jpg

A to [manual:56b697b3f1]preg_replace_callback[/manual:56b697b3f1] rzeczywiscie w sposob prosty i przyjemny obrabia wyrazenia w srodku stringa. O to mi chodzilo smile.gif

ps zle zacytowales
Cytat
Ale ja mówiłem o preg_match() A on zwraca wynik w formie tablicy


Ciekawilo mnie jak on to przez preg_mach() chce zrobic winksmiley.jpg


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
FiDO
post 16.01.2004, 02:08:01
Post #14





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Cytat
ps zle zacytowales

questionmark.gif
Cytat
Ciekawilo mnie jak on to przez preg_mach() chce zrobic winksmiley.jpg

Od biedy sie da, ale napewno nie zmiesci sie to w jednej linijce winksmiley.jpg


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
rzseattle
post 16.01.2004, 02:28:50
Post #15





Grupa: Przyjaciele php.pl
Postów: 554
Pomógł: 0
Dołączył: 4.04.2002
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Cytat
Cytat
ps zle zacytowales

questionmark.gif
Cytat
Ciekawilo mnie jak on to przez preg_mach() chce zrobic winksmiley.jpg

Od biedy sie da, ale napewno nie zmiesci sie to w jednej linijce winksmiley.jpg


Cytat
hmm ereg tez zwraca wynik w formie tablicy a ja dalej nie wiem jak to wszystko pozamieniac. Skad masz widziec gdzie co jest? Mozna oczywicie zastosowac jakies wyuzdane sposoby - najpierw wydzielic do tablicy potem split tekstu i przetasowac te dwie tablice - ale dalej nie wiem jak to zrobic prosciej. ?


FiDO mam wrazenie ze nie przeczytales wszystkich postow laugh.gif


--------------------
"Real children don't go hoppity-skip unless they are on drugs."
Go to the top of the page
+Quote Post
FiDO
post 16.01.2004, 12:42:43
Post #16





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Przeczytalem winksmiley.jpg ale po co sie meczyc z rozwiazaniem za pomoca (p|e)reg_match i kombinowac nie wiadomo jak skoro preg_replace_callback rozwiazuje to w duzo prostszy sposob.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
id4
post 16.01.2004, 12:51:51
Post #17





Grupa: Zarejestrowani
Postów: 223
Pomógł: 1
Dołączył: --
Skąd: Rogożnik /K-ce/

Ostrzeżenie: (0%)
-----


Witam.

To prawda. Krótka i bardzo wymowna funkcja, która wybawiła mnie od kombinowania z podmianą tekstów itp.

[php:1:0e72a92705]<?php
function phpText($text){
$text=preg_replace_callback("!<?php.*?>!sU", create_function('$m','return "<br /><br /><div class="phpcode">". highlight_string($m[0],true)."</div><br /><br />";'),$text);
return $text;
}
?>[/php:1:0e72a92705]

BigThanks FiDO :wink:

Mam jeszcze jedno pytanko ...
Jak wzorując się na powyższej funkcji (przy użyciu preg_replace_callback) wykonać funkcję nl2br do tekstu, który nie jest w znacznikach <?php ?>?
Go to the top of the page
+Quote Post
FiDO
post 16.01.2004, 14:21:08
Post #18





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $i = 0;
  3. $r = array();
  4.  
  5. function kolor($m)
  6. {
  7. global $i, $r;
  8. $r[$i] = highlight_string($m[0],true);
  9. return &#092;"##\".$i++.\"##\";
  10. }
  11.  
  12. echo preg_replace(&#092;"/##([0-9]+)##/e\", '$r[1]', nl2br( preg_replace_callback(\"!<?php.*?>!sU\", 'kolor', $test)));
  13. ?>


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
tiraeth
post 4.02.2004, 16:13:57
Post #19





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Może najpierw całe wyrażenie (kod i tekst) wziąć pod odstrzał [manual:1da6fbfbb2]nl2br[/manual:1da6fbfbb2] a potem sam kod wrzucic pod [manual:1da6fbfbb2]str_replace[/manual:1da6fbfbb2] który wszystkie <br /> zamieni na n

Tak samo można zamienić czcionkę w stringu. Można np tak:

[php:1:1da6fbfbb2]<?php
$color = "#FFFFFF"; // kolor zwyklego tekstu zwracanego przez highlight_string
$czcionka = "MS"; // czcionka calego stringa zwracanego przez highlight_string
$size = ""; // wielkosc czcionki calego stringa zwracanego przez highlight_string

$text = str_replace("<font face=".$czcionka." size=".$size." color=".$color.">", "<font face=Verdana size=".$size." color=".$color.", $text);

echo $text;
?>[/php:1:1da6fbfbb2]

(Nie wiem czy to będzie działać - z palca wyssane)
Go to the top of the page
+Quote Post
Sm0key
post 13.09.2004, 21:18:14
Post #20





Grupa: Zarejestrowani
Postów: 69
Pomógł: 1
Dołączył: 26.02.2004
Skąd: kielce. //Świętokrzyskie

Ostrzeżenie: (0%)
-----


a jak zrobic to z wyswietlaniem highlight_string wraz ze smartami. bo ja jak to zrobilem to wyswietla najpierw mi kolorowy kod a poóźniej reszte ze smartow czyli całą treść już bez tego kolorowego kodu.

Sory juz znalazlem nie przegladnelem dokladnie w manualu sad.gif
  1. <?php
  2. highlight_string($m[1],'false');
  3. ?>
wystarczy tak przepraszam za zasmiecanie forum sadsmiley02.gif

Ten post edytował Sm0key 13.09.2004, 21:24:55


--------------------
... aleobiad 80 %
"Doskonałości nie da się przyśpieszyć..."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 00:56