Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kolorowanie jedynie kodu PHP.
Forum PHP.pl > Forum > PHP
id4
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
spenalzo
[manual:890d67c4e4]highlight_string[/manual:890d67c4e4]
id4
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ę.
menic
Najpierw pobierasz wszystko między <?php a ?> za pomocą prega a potem highlight_string winksmiley.jpg
spenalzo
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]
id4
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 ...
rzseattle
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
menic
Ale ja mówiłem o [manual:b0e191226c]preg_match[/manual:b0e191226c]() A on zwraca wynik w formie tablicy winksmiley.jpg
rzseattle
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. ?
id4
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]
rzseattle
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]
FiDO
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
rzseattle
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
FiDO
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
rzseattle
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
FiDO
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.
id4
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 ?>?
FiDO
  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. ?>
tiraeth
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)
Sm0key
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.