Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: [code]--bbcode

Sivun loppuun

Sharph [05.05.2004 15:23:49]

#

Miten voisi tehdä code-bbcoden, joka värjäisi php-koodin code- ja /code-tagin välillä, niin että se menisi omaan boksiinsa?

tsuriga [05.05.2004 15:34:49]

#

strpos funkkarin avulla ainakin. Mitä tarkotat tolla "et se menis omaan boksiinsa"? Sellanen niinku täällä on [koodi] ?

Sharph [05.05.2004 15:36:02]

#

Just sellane

Olga [05.05.2004 15:39:06]

#

$teksti = preg_replace("/\[code\](.*?)\[\/code\]/i", "<code>$1</code>", $teksti);

Tuotako ajoit takaa?

Sharph [05.05.2004 15:51:28]

#

Värittääkö se tekstin?

Olga [05.05.2004 16:09:05]

#

Ai miten värittääkö? Ai meinaatko niinkuin täällä putkassa php-koodin värjäys? No ei. Siihen tarkoitukseen käy php:n oma highlight_string-funktio.

https://www.php.net/manual/en/function.highlight-string.php

Sharph [05.05.2004 16:27:54]

#

Silloin se värittää koko viestin, ei pelkästään code- ja /code-bbcodejen välissä olevaa. Pitäisi saada se värittämään ainoastaan ne mitkä on bbcodeilla merkitty.

Nyntti [05.05.2004 16:36:29]

#

haetko nyt highlight_string() -funkkaria?

esim.

<?php
$seppo = "<?php print\"OMG\"; ?>";
highlight_string($seppo);
?>

Sharph [05.05.2004 17:17:30]

#

En vaan sitä että miten sen saisi värittämään vain ja ainoastaan ne kohdat mitkä ovat code- ja /code-bbcodejen välissä!!

tsuriga [05.05.2004 17:27:43]

#

Mite ois ensin sen tekstin (mikä on tagien välissä) ettiminen ja sen ajaminen highlight_string funkkarin läpi?

Antti Laaksonen [05.05.2004 18:13:28]

#

Koodiosuuden värittäminen tageilla rajatulta alueelta on vähän vaikeampi juttu (mikä on tullut myös tällä keskustelualueella esille erinäisinä bugeina!). Näin se kuitenkin tapahtuu:

Etsi ensin viestistä koodiosuuden aloitus- ja lopetustagi (strpos). Sitten poimi erilleen niiden välissä oleva osa (substr) ja tee sille tarvittavat väritykset. PHP-värityksen tekeminen onnistuu tosiaan helposti highlight_string-funktiolla. Apua löytyy tämän koodivinkin kommenteista:
https://www.ohjelmointiputka.net/koodivinkit/23853-php-output-buffering

Muut väritykset täytyy luonnollisesti tehdä itse. Kun väritykset on tehty ja olet laittanut koodipätkän ympärille muutenkin tarvittavat HTML-tagit, täytyy pätkä enää liittää osaksi alkuperäistä viestiä. Tämä onnistuu jälleen substr-funktion avulla (viestin alku - koodiosuus - viestin loppu). Varo kuitenkin sitä, että skripti ei jää ikuiseen silmukkaan, jos kooditagin vastapari on unohtunut viestistä!

khaani [05.05.2004 18:23:18]

#

Tuossahan irksome sen vastauksen jo antoi.

$teksti = preg_replace("/\[code\](.*?)\[\/code\]/i", "<code>$1</code>", $teksti);

Lisätään tähän se highlight_string ja muutetaan vähän tuota regexpiä, että se natsaa myös silloin kun code-tagien sisällä on rivinvaihtoja, niin saadaan

$teksti = preg_replace("/\[code\](.*?)\[\/code\]/is", highlight_string("$1",true), $teksti);

khaani [05.05.2004 18:27:33]

#

Niin ja tällainen imo, että opetelkaa niiden regexpien käyttö. Huomattavasti helpompaa ja varmempaa tekstien parsetus niillä, kuin että itse väsätään purkkafunktiot strpossin, substringin ja muiden stringien käsittelyyn tarkoitettujen funktioiden avulla.

khaani [05.05.2004 19:06:44]

#

Äh, ei se käynytkään ihan noin helposti mitä aluksi ajattelin. Tuo muokkaus nappulakin jo jumittunut, joten postaan tähän toimivamman ratkaisun.

<?php

$teksti = preg_replace_callback
(
	"/\[code\](.*?)\[\/code\]/is",
	create_function
	(
		'$teksti',
		'return highlight_string( $teksti[1] ,true);'
	),
	$teksti
);

?>

Tämä siis värittää mistä tahansa tekstistä löytyvän [code] -tagien välin, jos sieltä koodia löytyy.

Antti Laaksonen [05.05.2004 19:34:44]

#

Tuo tapa on tosiaankin parempi! Kiitos vinkistä, en tiennyt että regexpiin on mahdollista yhdistää funktio. Ja näemmä hightlight_stringin tulostuksenkin saa nykyään suoraan muuttujaan ilman eri kikkoja.

ajv [05.05.2004 19:55:41]

#

Noista regexpeistä vielä sen verran, että joku halukas vois tehä niistä ihan oman oppaan putkaan. Aina kun olen niitä tarvinnut, olen yrittänyt selvittää niiden syntaxia, mutta ei vain ole tähän pääkoppaan uponnut.

edit: No hyvä ystävämme Google auttaa myös tähän ongelmaan näköjään :)

Blaze [05.05.2004 20:18:11]

#

ajv kirjoitti:

Noista regexpeistä vielä sen verran, että joku halukas vois tehä niistä ihan oman oppaan putkaan.

Kannatan. Ehkäpä ne kerranki tulis opeteltua, jos Putkassa olis laadukas opas.

folio [05.05.2004 20:21:35]

#

create_function -funkkaria kannattaa välttää, ainakin mitä on uskominen php.net:n manuaaliin. Mutta preg_replace:n yhteydessä on myös mahdollista käyttää callback-funktiota, jos oikein muistan niin tähän tyyliin:

$teksti = preg_replace("/\[code\](.*?)\[\/code\]/ems", "highlight_string('\\1',true)", $teksti);

khaani [05.05.2004 21:22:13]

#

ederth kirjoitti:

create_function -funkkaria kannattaa välttää, ainakin mitä on uskominen php.net:n manuaaliin. Mutta preg_replace:n yhteydessä on myös mahdollista käyttää callback-funktiota, jos oikein muistan niin tähän tyyliin:

$teksti = preg_replace("/\[code\](.*?)\[\/code\]/ems", "highlight_string('\\1',true)", $teksti);

Tuota e modifieriä kokeilin kans, mutta se jotain bugaili. Tuon create_function -ongelman voinee ratkaista niin, että tekee siitä oman erillisen funktion, jonka sitten sijoittaa tuohon preg_replace_callbackkiin.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta