php如何将html转成ubb

我的代码如下,为什么html转换ubb无效

    $topic_id = "";
    $article_id = "";
    $uid = "1";
    $title = isset($_POST['title']) ? $_POST['title'] : '';
    $content = isset($_POST['content']) ? $_POST['content'] : '';
    $content = strip_tags($content,'<img>,<p>,<strong>,<video>,<iframe>');//转换html代码
    $content = preg_replace('/style=".*?"/', '', $content);
    $content = preg_replace("/\s+/", " ", $content);
    $content = preg_replace("/<[ ]+/si","<",$content); //过滤<__("<"号后面带空格)
    //$content = preg_replace("'([\r\n])[\s]+'", " ", $content);
    $content = preg_replace("/<(\w+)><\/\\1>/", "", $content);//过滤空白标签
    $content = preg_replace("/(<img[^>]*\/>)/", "<br>\\1<br>", $content);//前后图片带br
    $content = preg_replace("'&nbsp;'", "", $content);
    $content = preg_replace("/class=.+?['|\"]/i",'',$content);
    $content = eregi_replace(quotemeta("[b]"),quotemeta("<b>"),$content);
$content = eregi_replace(quotemeta("[/b]"),quotemeta("</b>"),$content);
$content = eregi_replace(quotemeta("[u]"),quotemeta("<u>"),$content);
$content = eregi_replace(quotemeta("[/u]"),quotemeta("</u>"),$content);
$content = eregi_replace(quotemeta("[br]"),quotemeta("<br>"),$content);
$content = eregi_replace(quotemeta("[/br]"),quotemeta("</br>"),$content);
$content = eregi_replace(quotemeta("[strong]"),quotemeta("<strong>"),$content);
$content = eregi_replace(quotemeta("[/strong]"),quotemeta("</strong>"),$content);
$content = eregi_replace(quotemeta("[img]"),quotemeta("<img>"),$content);
$content = eregi_replace(quotemeta("[/img]"),quotemeta("</img>"),$content);
$content = eregi_replace(quotemeta("[iframe]"),quotemeta("<iframe>"),$content);
$content = eregi_replace(quotemeta("[/iframe]"),quotemeta("</iframe>"),$content);
$content = eregi_replace(quotemeta("[p]"),quotemeta("<p>"),$content);
$content = eregi_replace(quotemeta("[/p]"),quotemeta("</p>"),$content);

求解,需要怎么写才能将html转换成ubb代码

阅读 4.6k
2 个回答

不明白你为啥要用eregi_replacepreg_replace不好吗

而且eregi_replace的第一个参数是搜索模式,第二个参数是替换的内容。你搜索UBB代码替换成HTML代码,怎么能把HTML转换成UBB呢。

再一个,没有</img></br>这种HTML代码,据我所知也没有[p][\p]这种UBB代码,不知道你是自己有一套规则还是怎样。

先把你的这些问题解决了再来看为什么不能工作吧。

数据库存储的是bbcode,输出HTML时需要把bbcode转换成HTML.
用户需要重新编辑内容时,仍然是输出数据库里的bbcode.
也就是说,楼主把HTML转成bbcode的逻辑是很少见的.

对于简单的bbcode转HTML,只需要str_replace即可:

<?php
echo str_replace(
    array('[b]', '[/b]', '[i]', '[/i]'), 
    array('<strong>', '</strong>', '<i>', '</i>'), 
    '[i][b]加粗并倾斜[/b][/i]'
);
//输出 <i><strong>加粗并倾斜</strong></i>

注意:str_replace不能保证成对转换.

bbcode的多种标签的解析还是比较复杂的,需要用到不少正则表达式,而且在转成HTML时仍然需要格外注意XSS注入攻击,建议楼主看看PunBB/FluxBB的/include/parser.php里的bbcode相关的解析操作,可以作为PHP正则表达式的一个学习和应用实例.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题