求个代码

驴仔阿

站长你好呀,可以发下ajax里的message_fmt生成的代码吗,我尝试自己写,写不出树状。

nurl

技术那边可能会过段时间发布这部分的开源内容,您可以到时候关注下。

Tillreetree

↓以下代码通过GPL v3开源协议授权↓

<?php
    if(!function_exists('html_to_obj')){
         /**
         * 此函数将HTML字符串作为参数,并将其转换为DOMDocument对象。
         * 然后使用element_to_obj()函数将DOMDocument对象转换为关联数组。
         * 最后可以用json_encode()函数将数组变成JSON数据。
         * 
         * 注意:如果输入的HTML不带``标签的话,会自动补全。
         * 如果只想要``里的内容,请取结果中的['children'][0]['children']。
         * 
         * @param string $html HTML代码
         * @param bool $return_object 返回对象?
         * @return array|object 包含HTML数据的数组或对象
         */
        function html_to_obj($html,$return_object = false) {
            $dom = new DOMDocument();
            $XML_HEADER = '<' . '?' .'xml encoding="UTF-8">';
            $dom->loadHTML($XML_HEADER. $html,LIBXML_NOERROR); //某些HTML5标签会导致错误发生,用LIBXML_NOERROR压制错误
            if($return_object) {
                return $dom;
            } else {
                return element_to_obj($dom->documentElement);
            }
        }
         /**
         * 将HTML对象转换为数组。
         * @param DOMDocument|object $element 要转换的包含HTML数据的对象。
         * @return array 表示HTML元素的关联数组。
         */
        function element_to_obj($element) {
            //var_dump($element);
            //echo $element->tagName, "\n";
            $obj = array( "tag" => $element->tagName );
            foreach ($element->attributes as $attribute) {
                $obj[$attribute->name] = $attribute->value;
            }
            foreach ($element->childNodes as $subElement) {
                if ($subElement->nodeType == XML_TEXT_NODE) {
                    if (in_array($element->tagName,array('b', 'big', 'i', 'small', 'tt','abbr', 'acronym', 'cite', 'code', 'dfn', 'em', 'kbd', 'strong', 'samp', 'var','bdo', 'br', 'q', 'span', 'sub',  'sup'
                    ))) {
                        $obj["html"] = $subElement->wholeText;
                    } else {
                        if($subElement->wholeText == "\r\n") {
                            continue;
                        } else {
                            $obj["children"][] = array('tag' => 'txt','html' => $subElement->wholeText);
                        }
                    }
                } elseif ($subElement->nodeType == XML_CDATA_SECTION_NODE) {
                    $obj["html"] = $subElement->data;
                }
                else {
                    $obj["children"][] = element_to_obj($subElement);
                }
            }
            return $obj;
        }
    }
?>

↑以上代码通过GPL v3开源协议授权↑

用法:

<?php
    //最终的帖子内容——HTML解析成JSON
    $_post_message_full = preg_replace_callback('#<(\w+)([^>]*)\s*/>#s', function($matches){

        // ignore only these tags
        $xhtml_tags = array('br', 'hr', 'input', 'frame', 'img', 'area', 'link', 'col', 'base', 'basefont', 'param' ,'meta');
 
        // if a element that is not in the above list is empty,
        // it should close like   `<element></element>` (for eg. empty `<title>`)
        return in_array($matches[1], $xhtml_tags) ? "<{$matches[1]}{$matches[2]} />" : "<{$matches[1]}{$matches[2]}></{$matches[1]}>";
    }, $_post_message_full);
    $thread['message_fmt'] = html_to_obj($_post_message_full)['children'][0]['children'];
?>
鹅mm
楼主也要开发app吗
驴仔阿
是的,零基础自己捣鼓,也是用的xiuno这个程序尝试做成App
驴仔阿
App评论回复提交成功后建议有提交成功提醒,我刚刚回复没提醒以为没提交成功然后回复了好几次拉到下面才发现已经提交成功几条消息了。App发帖图片选择也有问题,授权不上。祝本站越做越好!
nurl
感谢反馈,我们将在下面的版本修复一些问题,并且增加新功能,谢谢支持~
nurl
回复帖子目前已有提示,下个版本会修复评论区代码模块可能导致布局过长的问题。感谢反馈!