我已经看到了一些解决方案,或者至少尝试过,但它们都没有真正起作用。
如何删除除<code>
或[code]
内的所有标记以外的所有标记,并将所有<
和>
替换为<
等,以便让JavaScript在输出上做一些语法高亮显示吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
<?php
$str = '<b><code><b><a></a></b></code></b><code>asdsadas</code>';
$str = str_replace('[code]', '<code>', $str);
$str = str_replace('[/code]', '</code>', $str);
preg_match('/<code>(.*?)<\/code>/', $str, $matches);
$str = strip_tags($str, "<code>");
foreach($matches as $match)
{
$str = preg_replace('/<code><\/code>/', $str, '<code>'.htmlspecialchars($match).'</code>', 1);
}
echo $str;
?>
这将搜索代码标记并捕获标记内的内容。剥去标签。循环匹配将代码标记替换为捕获的文本并替换&lt;和&gt;。
编辑:添加了两个str_replace行以允许[code]。
答案 2 :(得分:0)
使用回调:
$code = 'code: <p>[code]<hi>sss</hi>[/code]</p> more code: <p>[code]<b>sadf</b>[/code]</p>';
function codeFormat($matches)
{
return htmlspecialchars($matches[0]);
}
echo preg_replace_callback('@\[code\](?:(?!\[/code\]).)*\[/code\]@', 'codeFormat', $code);
答案 3 :(得分:0)
$str = '[code]
<script type="text/javascript" charset="utf-8">
var foo = "bar";
</script>
[/code]
<a href="should get removed">strip me</a>';
echo formatForDisplay( $str );
function formatForDisplay( $output ){
$output = preg_replace_callback( '#\[code]((?:[^[]|\[(?!/?code])|(?R))+)\[/code]#', 'replaceWithValues', $output );
return strip_tags($output);
}
function replaceWithValues( $matches ){
return htmlentities( $matches[ 1 ] );
}
尝试这应该工作,我测试它,它似乎有所期望的效果。
答案 4 :(得分:0)
好吧,我用你所有给定的代码做了很多尝试,现在我正在使用这个代码,但它仍然没有给出预期的结果 -
我想要的是,一个普通的textarea,一个人可以放常规文本,点击输入,有一个新行,不允许在这里标记 - 可能是<strong>
或<b>
....
完美的是识别链接并用<a>
标签包围它们
此文字应自动包含<p>
和<br />
。
要填写各种语言的代码,我们应该输入
[code lang=xxx]
代码[/code]
- 在最好的情况下[code lang="xxx"]
或<code lang=xxx>
也会有效。
而不是键入代码或复制并粘贴它。
我目前正在使用的代码,至少更改标签并将标签和换行符输出除外:
public function formatForDisplay( $output ){
$output = preg_replace_callback( '#\[code lang=(php|js|css|html)]((?:[^[]|\[(?!/?code])|(?R))+)\[/code]#', array($this,'replaceWithValues'), $output );
return strip_tags($output,'<code>');
}
public function replaceWithValues( $matches ){
return '<code class="'.$matches[ 1 ].'">'.htmlentities( $matches[ 2 ] ).'</code>';
}
类似于它在这里工作。
答案 5 :(得分:-2)
strip_tag语法为您提供了确定允许标记的选项:
string strip_tags ( string $str [, string $allowable_tags ] )
- &gt;来自PHP手册。
这应该让你在我希望的正确方向上开始。