25

使用 PHP Simple HTML DOM Parser 时,换行
标记被剥离是否正常?

4

5 回答 5

58

我知道这很旧,但我也在寻找它,并意识到实际上有一个内置选项可以关闭换行符的删除。无需去编辑源代码。

PHP Simple HTML Dom Parser 的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)
于 2012-02-22T02:44:57.003 回答
21

也在为此苦苦挣扎,因为我需要在处理后轻松编辑 HTML。

SimpleHTMLDOM显然脚本中有一个布尔值,默认$stripRN设置为true。它去除 HTML 中的\r,\n​​ 或\r\n标记。

将 var 设置为false(脚本中多次出现..),您的问题就解决了。

于 2011-09-29T13:49:28.353 回答
2

您不必将 all 更改$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;
于 2011-11-15T23:27:27.233 回答
1

如果你路过这里想知道你是否可以在 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 或 slash.RN 等

于 2014-02-28T22:14:21.453 回答
-2

如果希望保留其他格式(例如段落和标题),另一种选择是使用innertext而不是plaintext对结果执行自己的字符串清理。

我意识到性能会受到影响,但它确实允许更精细的控制。

于 2012-03-25T11:33:30.093 回答