↓以下代码通过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']; ?>
Tillreetree ↓以下代码通过GPL v3开源协议授权↓ <?php if(!function_exists('html_to_obj')){ ...谢谢,太感谢了。
驴仔阿 App评论回复提交成功后建议有提交成功提醒,我刚刚回复没提醒以为没提交成功然后回复了好几次拉到下面才发现已经提交成功几条消息了。App发帖图片选择也有问题,授权不上。祝本站越做越好!
这些问题我们正在加紧解决
求个代码