如果我在PHP中创建论坛,留言簿,评论部分等,并且某人输入了诸如hi之类的文本而不是以红色显示,则会显示为原始文本。我尝试过使用htmlentites()和htmlspecialchars(),但问题是我正在做一个preg_replace()来将bbcode标签替换为html标签,就像论坛系统一样。如果我在替换之前使用htmlspecialchars(),它不起作用。但是,如果我在替换后使用htmlspecialchars(),它会显示我转换为原始文本的html标记。
<html>
<head>
<title>BBCODE TEST</title>
<link rel=stylesheet href="bbcode.css" />
<script type="text/javascript" src="bbcode.js"></script>
</head>
<body>
<?php
$form = "<form method='post' action=''>
<input type='textbox' class='textbox' name='textbox' onKeyPress='return check(event)'/>
<input type='submit' class='submit' name='submit' value='Submit' />
</form>";
if (isset($_POST['submit']) && isset($_POST['textbox'])){
$text = $_POST['textbox'];
$text = bbcode($text);
echo $text;
echo $form;
} else {
echo $form;
}
function bbcode($text){
$text = $_POST['textbox'];
$patterns = array(
"/\[url=(.+)\](.*)\[\/url\]/is" => "<a href='\\1'>\\2</a>",
"/\[img\](.+)\[\/img\]/is" => "<img src='\\1' />",
"/\[b\](.+)\[\/b\]/is" => "<b>\\1</b>",
"/\[i\](.+)\[\/i\]/is" => "<i>\\1</i>",
"/\[u\](.+)\[\/u\]/is" => "<u>\\1</u>",
"/\[color=(.+)\](.*)\[\/color\]/is" => "<font color='\\1'>\\2</font>"
);
foreach($patterns as $pattern => $replace){
$text = preg_replace($pattern, $replace, $text);
}
return $text;
}
?>
</body>
</html>