保留换行符 - 简单的HTML DOM解析器
也很苦恼,因为我需要HTML在处理后很容易编辑。
显然有在SimpleHTMLDOM
脚本$stripRN
一个布尔值,这是设置为true
上默认。它将HTML中的\r
,\n
或\r\n
标签剥离。
将var设置为false
(在脚本中出现了几处),并解决了您的问题。
感谢这个答案,你只是保存了一天:D – mingos 2011-10-24 11:28:25
我**真**希望这被记录在他们的网站上。队友的欢呼声! – 2012-07-06 18:02:47
您不必改变所有$stripRN
为false,影响此行为的唯一一个是线816``:
// load html from string
function load($str, $lowercase=true, $stripRN=false, $defaultBRText=DEFAULT_BR_TEXT) {
还要考虑改变线路988,因为多字节的功能往往不安装在不涉及非西欧语言的机器上。在V1.5原始换行符立即脚本:
if (function_exists('mb_detect_encoding')) { $charset = mb_detect_encoding($this->root->plaintext . "ascii", $encoding_list = array("UTF-8", "CP1252")); } else $charset === false;
我知道这是老了,但我一直在寻找这样的欢迎,并意识到有实际上是一个内置的选项关闭移除管线断裂。无需编辑源代码。
的PHP简单的HTML DOM解析器的load
功能支持多种有用的参数:
load($str, $lowercase=true, $stripRN=false, $defaultBRText=DEFAULT_BR_TEXT)
当调用load
功能,只需通过false
作为第三个参数。
$html = new simple_html_dom();
$html->load("<html><head></head><body>stuff</body></html>", true, false);
如果使用file_get_html
,这是第九个参数。
file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT)
编辑:对于str_get_html
,这是第五个参数(感谢yitwail)
str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
另一种选择应该一个希望保留其他格式,如段落&标题是使用innertext
而非plaintext
然后用结果执行自己的字符串清理。
我意识到存在性能问题,但确实可以实现更细化的控制。
如果你经过这里想知道你是否可以在DomDocument中做同样的事情,那么我可以说你可以! - 但它是一个有点脏:(
我的代码片段,我想整齐,但保留确切的换行符它含有(\ n)的 这是我做过什么....
// NOTE: If you're HTML isn't a full HTML document then expect DomDocument to
// start creating its own DOCTYPE, head and body tags.
// Convert \n into a pretend tag
$myContent = preg_replace("/[\n]/","<img src=\"slashN\" />",$myContent);
// Do your DOM stuff...
$dom = new DOMDocument;
$dom->loadHTML($myContent);
$dom->formatOutput = true;
$myContent = $dom->saveHTML();
// Remove the \n's that DOMDocument put in itself
$myContent = preg_replace("/[\n]/","",$myContent);
// Put my own \n's back
$myContent = preg_replace("/<img src=\"slashN\" \/>/i","\n",$myContent);
。
重要的是要注意,我知道,毫无疑问,我的输入仅包含\ n。如果需要考虑\ r \ n或\ t,您可能需要自己的变体,例如slash.T或斜杠。RN等
使用内置的dom解析器,而不是简单的html dom。内置的解析器速度提高了一个数量级。 http://whitlock.ath.cx/FastCrawl/benchmark.php – 2011-01-27 04:29:29
对不起,@ByronWhitlock,但我不使用简单的HTML DOM解析器的速度,我用它来做很多事情,我根本无法做的DOMDocument,而且它更容易!但是,OH 2012-07-06 18:02:17