Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: BBCode => HTML
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Stron: 1, 2
BzikOS
Witam. Przysiadłem nad funkcją do zamiany BBCode na HTML, którą kiedyś na szybko napisałem, a która nie była pozbawiona wad. Oto wersja 2.0 snitch.gif Proszę testować i zgłaszać błędy.

  1. <?php
  2. function bb2html( $str )
  3. {
  4. global $codesArr;
  5.  
  6. $codesArr = array( 'url' => array( 'a', 'href=\"' ),
  7. 'img' => array( 'img', 'src=\"' ),
  8. 'color' => array( 'span', 'style=\"color:' ),
  9. 'font' => array( 'span', 'style=\"font-family:' ),
  10. 'table' => array( 'table', 'table' ),
  11. 'b' => 'b',
  12. 'u' => 'u',
  13. 'i' => 'i',
  14. 'ul' => 'ul',
  15. 'li' => 'li' );
  16. reset ($codesArr);
  17. foreach( $codesArr as $aKey => $aVal )
  18. {
  19. $str = preg_replace_callback( &#092;"#[($aKey)+[=]?(http|https|ftp+://)?(.*?)](http|https|ftp+://)?(.*?)[/$aKey]#si\", 'repl', $str );
  20. }
  21. return( $str );
  22. }
  23.  
  24.  
  25. function repl( $matches )
  26. {
  27. global $codesArr;
  28. if( is_array( $codesArr[$matches[1]] ) )
  29. {
  30. if( !empty( $matches[2] ) )
  31. {
  32. $protocol = $matches[2];
  33. }
  34. elseif( !empty( $matches[4] ) )
  35. {
  36. $protocol = $matches[4];
  37. }
  38. else
  39. {
  40. $protocol = 'http://';
  41. }
  42.  
  43. switch( $matches[1] )
  44. {
  45. case 'url':
  46. $address = empty( $matches[3] ) ? $matches[5] : $matches[3];
  47. $x = '<' . implode( ' ', $codesArr[$matches[1]] ) . $protocol . $address . '\" class=\"link1\" target=\"_blank\">';
  48. $x .= $matches[4] . $matches[5];
  49. $x .= '</' . $codesArr[$matches[1]][0] . '>';
  50. break;
  51.  
  52. case 'img':
  53. $address = empty( $matches[3] ) ? $matches[4] . $matches[5] : $matches[2] . $matches[3];
  54. $x = '<' . implode( ' ', $codesArr[$matches[1]] ) . $address . '\" class=\"icon\" alt=\"\" />';
  55. break;
  56.  
  57. case 'table':
  58. $temp = explode( &#092;"n\", str_replace( \"r\", '', $matches[5] ) );
  59. $rows = '';
  60. $colsNo = 1;
  61. foreach( $temp as $row )
  62. {
  63. if( !empty( $row ) )
  64. {
  65. $colsNo = ( substr_count( $row, '|' ) + 1 > $colsNo ) ? substr_count( $row, '|' ) + 1 : $colsNo;
  66. $rows .= '<tr><td>' . str_replace( '|', '</td><td>', $row ) . '</td></tr>';
  67. }
  68. }
  69. if( !empty( $matches[3] ) )
  70. {
  71. $headInfo = explode( '|', $matches[3] );
  72. $head = ( !empty( $headInfo[0] ) ) ? '<tr><th colspan=\"' . $colsNo . '\">' . $headInfo[0] . '</th></tr>' : '';
  73. $border = ( is_numeric( $headInfo[1] ) ) ? $headInfo[1] : 1;
  74. $width = ( !empty( $headInfo[2] ) ) ? $headInfo[2] : '';
  75. }
  76. $x = !empty( $rows ) ? '<'.$codesArr[$matches[1]][0].' border=\"'.$border.'\" width=\"'.$width.'\">'.$head.$rows.'</'.$codesArr[$matches[1]][1].'>' : '';
  77. break;
  78.  
  79. default:
  80. $x = '<' . implode( ' ', $codesArr[$matches[1]] ) . $matches[3] . '\">';
  81. $x .= $matches[4] . $matches[5];
  82. $x .= '</' . $codesArr[$matches[1]][0] . '>';
  83. break;
  84. }
  85. }
  86. else
  87. {
  88. $x = '<' . $codesArr[$matches[1]] . '>' . $matches[5] . '</' . $codesArr[$matches[1]] . '>';
  89. }
  90.  
  91. return $x;
  92. }
  93. ?>


Możliwe BBCode'y:
Kod
[url]www.adres.pl[/url]

[url]http://www.adres.pl[/url]

[url=www.adres.pl]text[/url]

[url=http://www.adres.pl]text[/url]

[url=https://www.adres.pl]text[/url]

[url]https://www.adres.pl[/url]

[url=ftp://ftp.adres.pl]text[/url]

[url]ftp://ftp.adres.pl[/url]

[img]http://www.adres.pl/image.xxx[/img]

[img=http://www.adres.pl/image.xxx][/img]

[color=kolor]text[/color]

[b]text[/b]

[i]text[/i]

[u]text[/u]

[font=kroj_czcionki]text[/font]

[table] element 1 | element2 | element3
element 4 | element5 | element6[/table]

[ul][li]element1[/li] [li]element2[/li][/ul]


Oczywiście można też samemu dorobić odpowiednie BBCode'y smile.gif

Definicja funkcji:
string <span style="font-weight: bold;">bb2html</span>( string )
splatch
Próbowałem użyć tej funkcji i mi nie zadziałało sad.gif.
BzikOS
Cytat
Próbowałem użyć tej funkcji i mi nie zadziałało sad.gif.

I uważasz, że na podstawie tak szczegółowych danych, powiem Ci dlaczego nie zadziałało?
Majdan
Cytat
Cytat
Próbowałem użyć tej funkcji i mi nie zadziałało sad.gif.

I uważasz, że na podstawie tak szczegółowych danych, powiem Ci dlaczego nie zadziałało?


BziKOS, splatch nie pytał dlaczego. On poprostu napisał, że niedziała.
BzikOS
Cytat
Cytat
Cytat
Próbowałem użyć tej funkcji i mi nie zadziałało sad.gif.

I uważasz, że na podstawie tak szczegółowych danych, powiem Ci dlaczego nie zadziałało?


BziKOS, splatch nie pytał dlaczego. On poprostu napisał, że niedziała.

A uważasz, że umieszczałbym niedziałająca funkcję i jeszcze pisał [gotowa funkcja]?
...
Majdan
Cytat
Cytat
Cytat
Cytat
Próbowałem użyć tej funkcji i mi nie zadziałało sad.gif.

I uważasz, że na podstawie tak szczegółowych danych, powiem Ci dlaczego nie zadziałało?


BziKOS, splatch nie pytał dlaczego. On poprostu napisał, że niedziała.

A uważasz, że umieszczałbym niedziałająca funkcję i jeszcze pisał [gotowa funkcja]?
...

Ty prosiłeś o zgłoszenie błędu, on zgłosił. Może tylko tyle chciał przekazać. rolleyes.gif
Marusz
Wspolczuje Bzikowi. Napisal bardzo dobrze dzialajaca funkcje, ktora spisuje sie ZNAKOMICIE w trudnych warunkach, a z tego co widze, nawet nie dostal publicznej podzieki. Powiem wiecej. Jakbym sam na cos takiego wpadl, to zobaczylibyscie ten kod niczym swinia niebo. Swiadczy to tylko o wiedzy i mozliwosciach tego czlowieka. Jesli Wam nie dziala, a osmielacie sie korzystac z jego wypocin i chcecie zastosowac te funkcje u siebie w skryptach, to MILYM GESTEM w strone autora bylo by zdac KONKRETNY raport z dzialania. Jesli nie dziala - co jest ewidentnie Wasza wina - to rowniez nalezalo by opowiedziec co sie dzieje. W koncu na tym polega opensource. Nie zdziwilbym sie, jakby Bzikos przestal wystawiac tutaj swoje skrypty. Bo wychodzi na to, ze robi Wam łaskę...

I jeszcze jedno: dziekuje Ci Bziku, funkcja dziala super. Tymi kilkoma bogatymi w tresc linijkami zastapiles 2500 linii skryptu do sciagniecia z phpclasses smile.gif A dzialanie identyczne... Musialem Ci to napisac.
Majdan
Funkcja jest super :!: Co do niej nic nie mam i nie mam zamiaru jej nigdzie wykorzystywać. BziKOS odwalił kawał dobrej roboty i zapytał się komu nie działa, ktoś zgłosił błąd i na tym koniec. Ja nie wiem dlaczego nie napisał z jakiego powodu mu nie działa (nikt nie zaprzecza, że to jego wina, bo u mnie działa spox).

Sorry BziKOS, jeżeli Cię uraziłem, ale nie chciałem. :oops:
splatch
No więc użyłem funkcji w następujący sposób:

<?php

$tekst = "tekst
gruby
<br>
cienki";

echo bb2html( $tekst );

?>

Na php 4.3.2 nie zadziałało.

No i jeszcze jedno, pomysł rzeczywiście jest dobry, przepraszam, że wywołałem taką dyskusję. To było niechcący
Marusz
Cytat
No więc użyłem funkcji w następujący sposób:

<?php

$tekst = "tekst
gruby
<br>
cienki";

echo bb2html( $tekst );

?>


Ja tam bym wczesniej zaincludowal plik z funkcja... albo dolaczyl go gdzies wyzej. Ale sie nie znam i jestem lamerem aaevil.gif
Ozzy
splatch: być może nie zadziałało, ponieważ po wklejeniu na forum zawinęły się wiersze i trzeba je sobie wyprostować smile.gif
xardas
A mi nie dziala z innego powodu:
[php:1:46f1b957e1]<?php
include("bbcode.php");
$tekst = "tekst
gruby
<br>
cienki";

echo bb2html( $tekst );
?>[/php:1:46f1b957e1]

kiedy mam taki kod to wynikiem tego jest w przegladarce:
Kod
[b]tekst gruby[/b]

[i]cienki[/i]
Majdan
Cytat
A mi nie dziala z innego powodu:
[php:1:e5227f5639]<?php
include("bbcode.php");
$tekst = "tekst
gruby
<br>
cienki";

echo bb2html( $tekst );
?>[/php:1:e5227f5639]

kiedy mam taki kod to wynikiem tego jest w przegladarce:
Kod
[b]tekst gruby[/b]

[i]cienki[/i]


U mnie jak wpiszę taki kod jak u xardasa, to wyświetla mi:
Kod
tekst gruby

cienki
Marusz
Panowie, a co powiecie na to:

[php:1:c4f6a63935]<?php

require_once("bbcode.php");
$text = "ten tekst, bedzie ]b[pogrubiony]/b[,
dodatkowo jak sie ktos postara, to i ]u[podkreslony]/u[,
zas dla mistrzow w temacie, poleca sie rowniez uzycie ]i[kursywy]/i[";

echo bb2html($text);

?>[/php:1:c4f6a63935]

Oczywiscie Wy, w Waszych skryptach, musicie zamienic w zawartosci zmiennej $text znaczki ] na [, zas [ na ]. Zrobilem je odwrotnie, aby bbcode z forum.php.pl nie przetworzylo tej wartoscii. I dziala, nie ma prawa nie dzialac.
blitz!
Mi funkcja rowniez nie dziala.
Nawet jak przygotwalem statyczny text


Kod
require_once("bbcode.php");

$text = "ten tekst, bedzie [b]pogrubiony[/b],

dodatkowo jak sie ktos postara, to i [u] podkreslony[/u],

zas dla mistrzow w temacie, poleca sie rowniez uzycie [i]kursywy[/i]";



echo bb2html($text);



To wywali tak jak wpislaem- czyli bez sformatowania przez bbcode.php..

Kod
ten tekst, bedzie [b]pogrubiony[/b], dodatkowo jak sie ktos postara, to i [u] podkreslony[/u], zas dla mistrzow w temacie, poleca sie rowniez uzycie [i]kursywy[/i]


Co jest nie tak?
[/code]
blitz!
zwracam honor, dziala ofkors. Bledem bylo to ze skopiowalem stad i nic nie poprawilem. Forum porozwalalo kolejnsoc w liniach i trzeba to recznie porawic (1 linia jest formatowana na 3 i temu nie dziala)
MoD
Skrypt działa idealnie. Prawda, przy "czystym" skopiowaniu z forum trzeba wprowadzić trochę poprawek bo forum rozwala linijki ale tak to działa OK.
rafcio8405
BzikOS DZIAŁA TEN SKRYPT a Ci co mówili że nie działa to coś zwalili!! Brawa dla tego pana za napisanie tak świetnej funkcji thumbsupsmileyanim.gif
angel2953
Cytat(BzikOS @ 2004-03-14 15:08:32)
Oczywiście można też samemu dorobić odpowiednie BBCode'y smile.gif

Witam, na dziędobry thumbsupsmileyanim.gif dla autora funkcji... Nieco ją rozszerzyłem o kod [ email ] ale mam mały problem z [size=questionmark.gif]... sad.gif Wie ktoś jak to mniej więcej zrobić?
Ive
a czy ta funkcja działa w obie strony? czy tylko raz zamienia tagi [ url ] w <a href.... i już ich nie rusza ?
onlyX
Świetna funkcja. Wielkie gratulacje dla BzikOS'a za kawał dobrej roboty.

Mam pytanie. Czy dało by się to rozszeżyć o zamianę http:// i e-maili bez bbcode na linki?

Próbowałem połączyć te funcje z innymi, ale wszystko się sypało.
Najlepszy rezultat osiągnąłem przy pomocy funkcji:
  1. <?php
  2. function format_links($chk_str) {
  3.     $a = explode(&#092;" \", $chk_str);
  4.     for($i=0; $i<count($a); $i++) {
  5.         //Take care of URLs that don't start with \"http://\"
  6.         $b = str_replace(&#092;"www.\", \"http://www.\", $a[$i]);
  7.         $b = str_replace(&#092;"http://http://\", \"http://\", $b);
  8.         
  9.         //Identify URL
  10.         $pos = strpos($b, &#092;"http://\");
  11.         if ($pos === false) {
  12.             // note: three equal signs
  13.             $url_found = false;
  14.         }
  15.         else {
  16.             $url_found = true;
  17.         }
  18.         
  19.         if($url_found) {
  20.             //Replace URL with formatted URL
  21.             $a[$i] = &#092;"<a href='$b' target=_blank>$b</a>\";
  22.         }
  23.         
  24.         //Identify E-Mail
  25.         $pos = strpos($b, &#092;"@\");
  26.         if($pos === false) {
  27.             $email = false;
  28.         }
  29.         else {
  30.             $email = true;
  31.         }
  32.         
  33.         if($email) {
  34.             //Replace e-mail with formatted e-mail
  35.             $a[$i] = &#092;"<a href='mailto:$b'>$b</a>\";
  36.         }
  37.     }
  38.     
  39.     //Put string toghet with formatted links
  40.     $chk_str = implode(&#092;" \", $a);
  41.     
  42.     //Return formatted string
  43.     return $chk_str;
  44. }
  45. ?>

i użyciu:
  1. <?php
  2. $text = &#092;"http://www.xxx.pl<br>
  3. onlyx@o2.pl<br>
  4. [url]www.adres.pl[/url]<br>
  5. [url]http://www.adres.pl[/url]<br>
  6. [url=www.adres.pl]text[/url]<br>
  7. [url=http://www.adres.pl]text[/url]<br>
  8. [url=https://www.adres.pl]text[/url]\";
  9.  
  10. echo bb2html(format_links($text));
  11. ?>

jedynym błędem było to, że to pierwszych dwóch linków (tych bez bbcode) jako href wrzucało mi cały string.

Czy dałoby się to poprawić?


EDIT: po wstawieniu spacji pomiedzy adresami a <BR> do pierwszego linka wsatwiało dobry href, a do drugiego z <BR> na początku. Trzeba więc zrobić tak żeby rozdzielało wyrazy nietylko poprzez explode(" ", $chk_str) ale też explode("\n", $chk_str).
SoulRipper
dobra. ja robie to tak


Kod
fumction bb2html()
{
blablabla
}

$string "[b]iiiiiiiiiii[/b]";
echo bb2html($string);


natomiast jako wynik php wypluwa blad:
Kod
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\FoxServ\www\clan\test.php on line 59


ps. Oczywiscie w "blablabla" jest poprawny kod. Zeby nie bylo ;]
Ive
  1. <?
  2. $string = &#092;"iiiiiiiiiii\";
  3. ?>
... n/c
krysk
Mógłby ktoś to wystawić w formie phps na jakimś serwerze? Ew. podesłać mi na maila bo mam małe problemy z naprawieniem szkód wyrządzonych przez formatowanie forum ;-)
sf
Jakby ktoś potrzebował czegoś bardziej `poteżnego` to odsyłam tutaj :

http://www.christian-seiler.de/projekte/ph...e/index_en.html

smile.gif
primo
szukałem małej nieskomplikowanej funkcji zamieniającej tagi i dziś się na tą natkąłem. Jest po prostu git, ale nie chce mi coś działać. Nie wiem czy to dlatego że pisana była pod php 4,... a ja mam 5 czy też jest inny problem.

  1. <?php
  2.  
  3. include(&#092;"bbcode.php\");
  4.  
  5. $text = &#092;"ten tekst, bedzie pogrubiony.\";
  6.  
  7.  
  8. echo bb2html( $text );
  9. ?>


a taki jest wynik działania:

<>ubiony[/b].
Linandar
Mam ten sam problem My Webpage
dałem:
  1. <?php
  2.  
  3.  
  4. include(&#092;"bbcode.php\");
  5.  
  6. $text = &#092;"ten tekst, bedzie  pogrubiony ,dodatkowo jak sie ktos postara, to i  podkreslony ,zas dla mistrzow w temacie, poleca sie rowniez uzycie  kursywy \";
  7.  
  8. echo bb2html($text);
  9. ?>

i otrymałem:
Kod
<><><><><>rsywy [/i]
. Oczywiście tekst jest w skrypcie pisany w jednej linijce. Piszecie, że trzeba coś zmienić bo foru coś psuje, u mnie wszystkie linijki w oryginalnym kodzie są wyprostowane. Jeśli ktoś wie co muszę poprawić to proszę, napiszcie
bregovic
Ehhh, zobaczcie tutaj:
http://tmp.brego.dk/php/bbcode.php
I tutaj:
http://tmp.brego.dk/php/bbcode.phps
Linandar
No to dałem plamę.... chodziło tylko o nawiasy{} Przepraszam - nie zabijaj. :roll2:
jang
BzikOS to jest super. Działa od ręki. Win98 - Apache 1.3.31 - php 4.3.9
Dzięki.
angel2953
A jak do tego dodać jeszcze rozmiar czcionki by było tylko kilka zdefiniowanych tzn:
Kod
[size=rozmiar]tekst o rozmiarze rozmiar[/size]

tak by rozmiar był jednym z xx-small|x-small|small|medium|large|x-large|xx-large lub od 10 do 30 pixeli.

Z góry thx za pomoc...
Spirit86
  1. <?php
  2.  
  3. $codesArr = Array( 'url' => Array('a','href=\"'),
  4. 'img' => Array('img', 'src=\"'),
  5. 'color' => Array('span','style=\"color:'),
  6. 'size' => Array('span','style=\"size:'),
  7. 'b' => 'b', 
  8. 'u' => 'u', 
  9. 'i' => 'i');  
  10.  
  11. ?>

@angel2953: na przykład tak?
NuLL
Ja również dziękuje - własnie mi się przydała.

BTW. Pracuje nad bardziej zaawansowaną wersją smile.gif

@sf -to podałeś jest masakrycznie wolne dry.gif
Vengeance
Ze swojej strony jeszcze zapraszam na http://bbcode.strefaphp.net
Bojakki
Cytat(Linandar @ 2005-01-30 06:46:32)
Mam ten sam problem My Webpage
dałem:
  1. <?php
  2.  
  3.  
  4. include("bbcode.php");
  5.  
  6. $text = "ten tekst, bedzie  pogrubiony ,dodatkowo jak sie ktos postara, to i  podkreslony ,zas dla mistrzow w temacie, poleca sie rowniez uzycie  kursywy ";
  7.  
  8. echo bb2html($text);
  9. ?>

i otrymałem:
Kod
<><><><><>rsywy [/i]
. Oczywiście tekst jest w skrypcie pisany w jednej linijce. Piszecie, że trzeba coś zmienić bo foru coś psuje, u mnie wszystkie linijki w oryginalnym kodzie są wyprostowane. Jeśli ktoś wie co muszę poprawić to proszę, napiszcie

Mam ten sam problem, ale linki, ktore podal bregovic juz nie dzialaja i niestety nie wiem jak to poprawic:/ Moze ktos wie??
bregovic
Wyedytowałem linki w moim poście. Dla leniwców:
http://tmp.brego.dk/php/bbcode.php
http://tmp.brego.dk/php/bbcode.phps
Forgoot
Można by dodać jeszcze takie coś jak rozwijana tresc:

  1. <?php
  2.    function ukryj ( $match )   {
  3.       $id = uniqid();      
  4.       return '<a href="#" onclick="flip('' . $id . ''); return false;"><b>' . $match[1] . '</b></a><div id="' . $id . '" class="ukryj" style="display: none;">' . $match[2] . '</div>';
  5.    }
  6.    
  7.    $str = preg_replace_callback("#\[ukryj=\"?(.*?)\"?\](.*?)\[/ukryj]#si", 'ukryj', $str);
  8. ?>


JS:
Kod
function flip( rid ) {
  document.getElementById(rid).style.display = document.getElementById(rid).style.display == 'none' ? 'block' : 'none'
}


CSS:
Kod
.ukryj {
 padding-bottom: 10px; padding-left: 30px; padding-top: 10px; padding-right: 30px;
}


Uzywanie:
Kod
[ukryj="link"]rozwijana treść[/ukryj]


Wątek z tematu: http://forum.php.pl/index.php?showtopic=44296 Co Wy na to?
Pozdro smile.gif
Spirit86
hmm, wygląda mi to na plagiat:

eSports.pl:

  1. <A HREF="#" ONCLICK="flip('37f6deb5e7_1'); return false;"><img src="http://obrazkowiec.esports.pl/esports/img/layouts/hide_dot.gif" border="0"><B>Czytajcie dalej...</B></A><SPAN ID="37f6deb5e7_1"><script LANGUAGE="JAVASCRIPT">flip('37f6deb5e7_1');</SCRIPT><div style="padding-bottom: 10px;padding-left: 30px; padding-top: 10px; padding-right: 30px;">Dzięki prężnie rozwijającemu się portalowi o gamingu <a href="http://www.esports.pl" target="_blank" title="http://www.esports.pl" class="postlink">eSports.pl</a>, macie okazję zostać redaktorami prezentującymi najświeższe wiadomości z kraju i ze świata, na temat Waszych ulubionych grier - <span style="font-weight: bold">Call of Duty</span> oraz <span style="font-weight: bold">Call of Duty 2</span>. Korzyści płynących z tego typu hobby jest naprawdę wiele: ponieważ wymaga to regularnego zaznajamiania się sytuacją sceny zarówno polskiej jak i zagranicznej, tak więc stajesz się specjalistą w swojej dziedzinie, pisanie determinuje naukę języka polskiego oraz angielskiego i dzięki temu nabywasz umiejętności, które z pewnością przydadzą Ci się w szkole, bądź w życiu codziennym, regularność wymagana podczas pisania trenuje Twój charakter i wyrabia nawyk systematycznej pracy (wiem to z własnego doświadczenia!). Wymagania nie są wygórowane i przedstawiają się następująco:<br />


Kod
function flip(rid)
 {
   current=(document.getElementById(rid).style.display == 'none') ? 'block' : 'none';
   document.getElementById(rid).style.display = current;
 }


"Twój" kod:

Kod
function flip( rid ) {
  document.getElementById(rid).style.display = document.getElementById(rid).style.display == 'none' ? 'block' : 'none'
}
Forgoot
W moim ostatnim poście powiedziałem:
Cytat
natomiast w temacie do którego podałem link pisałem:
Cytat
(...) chcialbym wiedziec jak zrobic rozwijana tresc, i jak dodac taki kod do BBCode?
Przyklad rozwijanej treści jest w news'ie na stronie: zobacz (...)

I nie napisałem że to skrypt mego autorstwa. Poprostu zależało mi na takiej opcji. Chciałem dodać do tego tematu kod który przedstawiłem, aby uatrakcyjnić obecne BBCode.
Spirit86
no dobra, ale nie uważasz, że to nie fair korzystac z czyjegoś kodu bez jego wiedzy / zgody (?), a co gorsza publikować to w internecie, w temacie z którego wszyscy mogą skopiować kod, bo po to on jest?!
Forgoot
Jedyny tekst, który zapożyczyłem to kod JavaScript - a właściwie jego wycinek... Jeśli źle zrobiłem (a najprawdopodobniej tak jest) to przyznaję się bez bicia. Zerżnąłem ten kod bez niczyjej wiedzy i upubliczniłem na forum bez zgody i bardzo za to przepraszam. Jednak niesądze, że ten kod nie jest nigdzie indziej dostępny...
Jeśli jest taka potrzeba to mój wcześniejszy temat proszę usunać lub sam to zrobię osobiście ( również z tematu: http://forum.php.pl/index.php?showtopic=44296 ) ...

P.S. to chyba nie jest temat na wyrażanie opinii na temat plagiatu.
nospor
Cytat
hmm, wygląda mi to na plagiat:
Czy to nie są zbyt mocne slowa? 3 linijki kodu, ktore kazdy pczątkujący moze napisac, a ty mowisz ze plagiat. Na dodatek nawet jak na 3 linijki kodu, to mozna by to jeszcze zoptymalizować:
Kod
function innafunkcja( innyparametr ) {
obj = document.getElementById(innyparametr);
obj.style.display = obj.style.display == 'none' ? 'block' : 'none';
}
Jedno pobieranie obiektu mniej winksmiley.jpg

@Forgoot korzystaj z tego "mojego" kodu do woli. Wyrażam zgodę smile.gif

ps: i nie robmy juz tu OT
Mamber
Chodzi mi o skrypt php, który podał @Forgoot
Hmmmm. Wydaje mi się, że zamiast:
  1. <?php
  2. $id = uniqid();
  3. ?>

można by zastosować:
  1. <?php
  2. $id = uniqid(rand());
  3. ?>


lub coś innego, bo przy pierwszej opcji nie generuje unikalnego id dla następnego linku i JS sie "wali".

@nospor ten kod JS który podałeś przypuszczam że jest lepszym rozwiązaniem, ale czy używając Twego kodu należy zmodyfikować kod php i CSS, który podał @Forgoot?
nospor
@Mamber
nie. ja tylko zmodyfikowalem wnetrze funkcji. Dla jaj nazwalem ją też "innafunkcja", ale nazwij ją tak jak bylo i nie trzeba nic innego modyfikowac
Mamber
A jak ta opcje (ukrywania tekstu) dodac do bbCode skryptu PsNews 1.1 ?
angel2953
Kod
<><><><><><><><><><><><><><><><><><><><><><><><>u]


testowy string jak jak w przykładzie podany a to co wyżej to jego wynik... coś jest skopane
juzwa
jako, że jestem początkujący w wyrażeniach regularznych a php co najwyżej średnio kumaty pozwoliłem sobie zmienić trochę funkcję Autora

postanowiłem ją trohę zmodyfikować tak aby można było podawać klasy stylów CSS

żeby np była taka możliwość
]url style=styl[odnośnik do strony]/url[
]url=link style=styl[nazwa odnosnika]/url[

i takie coś mozna dodawać przy adresach, listach <ul><ol>, img itd itd

naiwasy powinny być odwrócone, ale to tylko tak aby tego nie zmieniło na html

i zrobiłem takie coś

  1. <?php
  2. for ($i=0;$i<9;$i++) //akurat znaczników mam na razie 9 w bazie więc tyle powtórzeń
  3. {
  4. /*zrobiłem tak, ze znaczniki bbcode są przechowywane w bazie i stamtad ciągnięte 
    więc tutaj całe to podpinanie do bazy i zapytanie*/
  5.  
  6. while(/*rekordy z bazy*/)
  7. {
  8. $marker=$a[bbcode_name];
  9. $text = preg_replace_callback("#[($marker)+[=]?(http|https|ftp+://)?(.[^]]*?)?s*?((style|class)+[=]?(.[^]]*?)?)?](http|https|ftp+://)?(.[^]]*?)?[/$marker]#si",'replace_text',$text );
  10.  
  11. }
  12. }
  13. echo nl2br($text);
  14. function replace_text($phase)
  15. {
  16. $class='';
  17. if(trim($phase[6])!='') 
  18. $class='class="'.$phase[6].'"';
  19. if ($phase[1]=='url' or $phase[1]=='img' or $phase[1]=='mail')
  20. {
  21. //szukanie protokołu
  22. if ($phase[2]!='') 
  23. $url_protocol=$phase[2];
  24. elseif ($phase[7]!='')
  25. $url_protocol=$phase[7];
  26. else
  27. $url_protocol='http://';
  28. if(trim($phase[3])!='')
  29. {
  30. if($phase[1]=='mail')
  31. $url_address=$phase[3];
  32. else
  33. $url_address=$url_protocol.$phase[3];
  34. if (trim($phase[8])!='')
  35. $url_description=$phase[8];
  36. else
  37. $url_description=$phase[3];
  38. }
  39. else
  40. {
  41. if($phase[1]=='mail')
  42. $url_description=$url_address=$phase[8];
  43. else
  44. $url_description=$url_address=$url_protocol.$phase[8];
  45. }
  46. if ($phase[1]=='url')
  47. $text_after_replace='<a href="'.$url_address.'" target="_blank" '.$class.'>'.$url_description.'</a>';
  48. elseif ($phase[1]=='img')
  49. $text_after_replace='<img src="'.$url_address.'" '.$class.'>';
  50. elseif($phase[1]=='mail')
  51. $text_after_replace='<a href="mailto:'.$url_address.'" '.$class.'>'.$url_description.'</a>';
  52. }
  53. else if ($phase[1]=='list')
  54. {
  55. if($phase[3]!='')
  56. {
  57. $list_letter='o';
  58. if($phase[3]==1 or $phase[3]=='A' or $phase[3]=='a' or $phase[3]=='I' or $phase[3]=='i')
  59. $type='type="'.$phase[3].'"';
  60. else
  61. $type='';
  62. }
  63. else
  64. {
  65. $list_letter='u';
  66. $type='';
  67. }
  68. $list_text='<'.$list_letter.'l '.$type.'>';
  69. $position_list_array=explode("n",$phase[8]);
  70. foreach ($position_list_array as $position_list)
  71. {
  72. if(trim($position_list)!='')
  73. $list_text.='<li>'.$position_list;
  74. }
  75. $list_text.='</'.$list_letter.'l>';
  76. $text_after_replace=$list_text;
  77. }
  78. else if ($phase[1]=='color')
  79. $text_after_replace='<span style="color:'.$phase[3].'">'.$phase[8].'</span>';
  80. else if ($phase[1]=='b')
  81. $text_after_replace='<b>'.$phase[8].'</b>';
  82. else if ($phase[1]=='u')
  83. $text_after_replace='<u>'.$phase[8].'</u>';
  84. else if ($phase[1]=='i')
  85. $text_after_replace='<i>'.$phase[8].'</i>';
  86.  return $text_after_replace;
  87. }
  88. ?>


i teraz pojawił się taki problem
1 - po dodaniu tego stylu musiałem w wyrażeniu reguralnym
"#\[($marker)+[=]?(http|https|ftp+://)?(.[^]]*?)?\s*?((style|class)+[=]?(.[^]]*?)?)?\](http|https|ftp+://)?(.[^]]*?)?\[\/$marker]#si"
dac takie ograniczniki
2 - po ich dodaniu gdy sa zagnieżdzenia BBCode jeśli wewnętrzny BBCode nie był zmieniony wykrzaczał się wewnętrzy
3 - obejście tego to powtórzenie wszystkiego tyle razy ile znaków BBCode jest w bazie

Co prawda jest to rozwiązanie - jakieś - ale mam takie pytanie jak skostruować wyrażenie regularne aby z jednej strony była zachoawna możliwośc umieszczania styli a z drugiej aby nie trzeba było robić tej petli for

W wyrażeniach reguralnych raczej jestem słaby i to taka moja pierwsza próba, która bardziej była rowzwinieciem już istniejącego rozwiazania niż własnym pomysłem - próbowałem jakoś robić to inaczej, ale nie wychodziło - jedynie w taki sposób działa

jakby ktoś miał jakiś pomysł to byłbym wdzieczny smile.gif
BzikOS
Ponieważ wiele ludzi nadal ma problemy z użyciem funkcji skopiowanej prosto z forum, postanowiłem ją nieco przeformatować. Mam nadzieje, że teraz nie będzie problemów.

Poprawiona i nieco rozszerzona wersja znajduje się w pierwszym poście tego wątku.


btw. nie zajmuję się już php
sujez
nie wiem czy komus cos to da ale ja robie tak
  1. <?php
  2. Function bbcode($zrodlo){
  3. $zrodlo=trim($zrodlo);
  4. $zrodlo=htmlspecialchars($zrodlo);
  5. $zrodlo=preg_replace("#(.*?)?(.*?)#si", "<A HREF="12" TARGET="_blank">12</A>", $zrodlo);
  6. $zrodlo=preg_replace("#(.*?)#si", "<A HREF="2" TARGET="_blank">3</A>", $zrodlo);
  7. $zrodlo=preg_replace("#(.*?)#si", "<b>1</b>", $zrodlo);
  8. $zrodlo=preg_replace("#(.*?)#si", "<i>1</i>", $zrodlo);
  9. $zrodlo=preg_replace("#(.*?)#si", "<u>1</u>", $zrodlo);
  10. $zrodlo=preg_replace("#[small](.*?)[/small]#si", "<small>1</small>", $zrodlo);
  11. $zrodlo=preg_replace("#[big](.*?)[/big]#si", "<big>1</big>", $zrodlo);
  12. $zrodlo=preg_replace("#[p](.*?)[/p]#si", "<p>1</p>", $zrodlo);
  13. $zrodlo=preg_replace("#
    (.*?)
    #si"
    , "<center>1</center>", $zrodlo);
  14. $zrodlo=preg_replace("#[code](.*?)[/code]#si", "<code>1</code>", $zrodlo);
  15. $zrodlo=preg_replace("#(.*?)#si", "<span style="color:2">3</span>", $zrodlo);
  16. $zrodlo=preg_replace("#(.*?)#si", "<span style="font-size:2">3</span>", $zrodlo);
  17. $zrodlo=preg_replace("#[img](.*?)[/img]#si", "<img src="1" border="0" alt="Obrazek" />", $zrodlo);
  18. $zrodlo=preg_replace("#[hr=([0-9]{1,2}|100)]#si", "<hr class="linia" width="1%">", $zrodlo);
  19. $zrodlo=nl2br($zrodlo);
  20. return $zrodlo;
  21. }
  22. ?>


pozniej jak chcem zeby zamienialo mi w danym tekscie to robie tak
  1. <?php
  2. bbcode($POST['tresc']);
  3. ?>

i mi dziala prosto napisane i bez grzebania w nie potrzebnych rzeczach
Spirit86
  1. <?php
  2. $zrodlo=preg_replace("#(.*?)#si", "<span style="color:2">3</span>", $zrodlo);
  3. $zrodlo=preg_replace("#(.*?)#si", "<span style="font-size:2">3</span>", $zrodlo);
  4. $zrodlo=preg_replace("#[img](.*?)[/img]#si", "<img src="1" border="0" alt="Obrazek" />", $zrodlo);
  5. ?>

to wydaje mi się bez sensu, po co to http?!
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.