geshi
nu zit ik met het volgende probleem ik haal de bericht uit de database.
probleem is dat gelijk de hele bericht 'ge-geshied' word .
hoe zorg ik ervoor dat ik netzoals op deze forum alleen alles tussen < ? php en ? > 'ge -geshied' krijg?????
bedoel je gescheiden krijgt ?
normaal tekst
ik heb zelf:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
$query = "SELECT *
FROM tbl_replies
WHERE reply_toppic =" .$_GET['id']. "
ORDER BY reply_ID ASC";
$mysql = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($mysql)) {
$bericht = $row['reply_bericht'];
$bericht =& new GeSHi($bericht, 'php');
$bericht->set_header_type(GESHI_HEADER_DIV);
echo $row['reply_user'].
'<br>'
.$bericht->parse_code();
}
?>
$query = "SELECT *
FROM tbl_replies
WHERE reply_toppic =" .$_GET['id']. "
ORDER BY reply_ID ASC";
$mysql = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($mysql)) {
$bericht = $row['reply_bericht'];
$bericht =& new GeSHi($bericht, 'php');
$bericht->set_header_type(GESHI_HEADER_DIV);
echo $row['reply_user'].
'<br>'
.$bericht->parse_code();
}
?>
dit 'Geshied' alles wat dus niet de bedoeling is :(
met die preg_Replace_callback kom ik er nie egt uit
Gewijzigd op 01/01/1970 01:00:00 door Ruud van Dijk
Or die is een lelijke, lompe manier van foutafhandeling. Eigenlijk kun je het niet eens foutafhandeling noemen: je doodt geen pagina's/errors/tekst, toch?
$query is wel een goede variabele naam. $mysql daarintegen niet. Het resultaat wat je krijgt uit mysql_query() is geen mysql. Zoiets heet een resultaat. $result of $resultaat zal dus eerder op z'n plaats zijn.
Met ordenen op een ID zal Frank blij zijn. Een ID is niets, het geeft alleen een uniek record aan. Je kunt beter op een datum ordenen. Data zeggen veel meer dan IDs, wat eigenlijk maar een cijfertje is.
verder klopt het dat ik het beter $result kan noemen
$bericht = str_replace('
Code (php)
1
2
2
<?php', '<table border="1" width="700px" align="center"><tr><td><font size="4" color="red">CODE</font>', $bericht);
$bericht = str_replace('?>
$bericht = str_replace('?>
', '</td></tr></table>', $bericht);
moet weg dus zal mn post ff editen ;)
maar nu hoop ik eigenlijk nog op een antwoord op mn vraag:)
Quote:
Een ID is niets, het geeft alleen een uniek record aan.
Ben maar eigenwijs, van mijn part ga je de discussie aan met Frank. Je zult toch niet winnen...
Je kunt misschien via htmlentities() eerst de PHP-tags 'kapot' maken. Daardoor zullen ze sowieso weergeven worden. Controleer dan op de entity-codes van de < en > om op de tags te strippen. Het gebruik van preg_replace() is hier ook aan te raden. Met str_replace() red je het niet.
Djemo schreef op 28.03.2008 17:37:
Ben maar eigenwijs, van mijn part ga je de discussie aan met Frank. Je zult toch niet winnen...
Je kunt misschien via htmlentities() eerst de PHP-tags 'kapot' maken. Daardoor zullen ze sowieso weergeven worden. Controleer dan op de entity-codes van de < en > om op de tags te strippen. Het gebruik van preg_replace() is hier ook aan te raden. Met str_replace() red je het niet.
Quote:
Een ID is niets, het geeft alleen een uniek record aan.
Ben maar eigenwijs, van mijn part ga je de discussie aan met Frank. Je zult toch niet winnen...
Je kunt misschien via htmlentities() eerst de PHP-tags 'kapot' maken. Daardoor zullen ze sowieso weergeven worden. Controleer dan op de entity-codes van de < en > om op de tags te strippen. Het gebruik van preg_replace() is hier ook aan te raden. Met str_replace() red je het niet.
Maar zoals Frank zegt htmlentities zijn niet goed voor in een Db te stoppen wel om er weer uit te halen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function highlight_callback($matches)
{
return highlight_string($matches[1], true);
}
/* of voor Geshi */
function highlight_callback($matches)
{
$geshi = new GeSHi($matches[1], 'php');
$geshi->set_header_type(GESHI_HEADER_DIV);
return $geshi->parse_code();
}
$bericht = preg_replace_callback('{<\?(?:php|=)?(.+?)\?' . '>}s', 'highlight_callback', $bericht);
?>
function highlight_callback($matches)
{
return highlight_string($matches[1], true);
}
/* of voor Geshi */
function highlight_callback($matches)
{
$geshi = new GeSHi($matches[1], 'php');
$geshi->set_header_type(GESHI_HEADER_DIV);
return $geshi->parse_code();
}
$bericht = preg_replace_callback('{<\?(?:php|=)?(.+?)\?' . '>}s', 'highlight_callback', $bericht);
?>
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
@Jelmer: ik verbaas me altijd weer over regexs...
want hij voert de html codes uit hoe ga ik dat nog tegen en op welke plek moet ik het zetten ?
dus op regel 14 van Jelmers script dit plaatsen:
$bericht = htmlspecialchars($bericht);
EDIT: komt als gwone tekst neer zonder kleur :( etc
Gewijzigd op 01/01/1970 01:00:00 door Ruud van Dijk
Ik neem aan dat je ná regel 15 $bericht echoed?
Dan moet je
$bericht = htmlspecialchars($bericht);
tussen
$bericht = preg_replace_callback('{<\?(?:php|=)?(.+?)\?' . '>}s', 'highlight_callback', $bericht);
en
echo $bericht; // oid.
zetten.
zelf dacht ik aan return $geshi->parse_code(); vervangen door return htmlspecialchars($geshi->parse_code());
maar dat geeft ook geen kleurcodes enzo weer etc :(
Wordt wel lastig zo ;)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
function substitute_code_callback($matches)
{
global $code;
$code[] = $matches[0];
$identifier = count($code) - 1;
return chr(0) . $identifier . chr(0);
}
function highlight_code_callback($matches)
{
global $code;
return highlight_string($code[$matches[1]], true);
}
/* Deze array bevat tijdelijk alle code van een bericht. Let op dat je hem
voor je aan een nieuw bericht begint weer even leegt */
$code = array();
/* Code extraheren */
$bericht = preg_replace_callback('{<\?(?:php|=)?(.+?)\?'.'>}s', 'substitute_code_callback', $bericht);
/* Voer alle handelingen op de rest van het bericht uit, zoals UBB & HTML */
$bericht = htmlentities($bericht, ENT_QUOTES, 'UTF-8');
/* Code gehighlight weer terug in het bericht plaatsen */
$bericht = preg_replace_callback('{\x00([0-9]+?)\x00}', 'highlight_code_callback', $bericht);
echo $bericht;
?>
function substitute_code_callback($matches)
{
global $code;
$code[] = $matches[0];
$identifier = count($code) - 1;
return chr(0) . $identifier . chr(0);
}
function highlight_code_callback($matches)
{
global $code;
return highlight_string($code[$matches[1]], true);
}
/* Deze array bevat tijdelijk alle code van een bericht. Let op dat je hem
voor je aan een nieuw bericht begint weer even leegt */
$code = array();
/* Code extraheren */
$bericht = preg_replace_callback('{<\?(?:php|=)?(.+?)\?'.'>}s', 'substitute_code_callback', $bericht);
/* Voer alle handelingen op de rest van het bericht uit, zoals UBB & HTML */
$bericht = htmlentities($bericht, ENT_QUOTES, 'UTF-8');
/* Code gehighlight weer terug in het bericht plaatsen */
$bericht = preg_replace_callback('{\x00([0-9]+?)\x00}', 'highlight_code_callback', $bericht);
echo $bericht;
?>
Je moet de highlight-functie nog even naar geshi omzetten. Merk op dat ik hier 0bytes gebruik als plaatsvervangers voor de code. Normaal komen die als het goed is niet voor in een bericht.
de niet code gedeelte worden de enters weggelaten hoe krijg ik die terug
ik weet dat er zoeits bestaat als nl2br maar zou niet weten waar ik het moet toepassen :(
voeg je nl2br toe:
nl2br zet het \n (newline) karakter om in een HTML break, <br>. Daarom moet je het na htmlentities doen. Geshi doet dit al voor je code, dus daarom moet het voor de tweede preg_replace_callback.
volgende probleeem ..:(
als ik geen php code in een bericht zit dan krijg ik de volgende foutmelding:
Fatal error: Cannot redeclare substitute_code_callback() (previously declared in C:\wamp\www\Project5 Forum\toppic.php:105) in C:\wamp\www\Project5 Forum\toppic.php on line 105
hoe krijg ik die weg ??
Heb je de functies binnen een lus gezet? Of staan ze op meerdere plekken? Want je mag een functie maar 1 keer definiëren.