PHP Simple HTML DOM Parser を使用する場合、改行
タグが削除されるのは正常ですか?
5 に答える
これは古いことは知っていますが、私もこれを探していて、実際には改行の削除をオフにする組み込みのオプションがあることに気付きました。ソースを編集する必要はありません。
PHP Simple HTML Dom Parserのload
関数は、複数の便利なパラメーターをサポートしています。
load($str, $lowercase=true, $stripRN=false, $defaultBRText=DEFAULT_BR_TEXT)
関数を呼び出すときは、3番目のパラメーターとしてload
渡すだけです。false
$html = new simple_html_dom();
$html->load("<html><head></head><body>stuff</body></html>", true, false);
を使用する場合file_get_html
、これは9番目のパラメーターです。
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
、これは5番目のパラメーターです(yitwailに感謝)
str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
処理後にHTMLを簡単に編集できるようにする必要があったため、これにも苦労していました。
どうやら、SimpleHTMLDOM
スクリプト$stripRN
にはブール値があり、デフォルトで設定されtrue
ています。HTMLの\r
、\n
または\r\n
タグを削除します。
varをfalse
(スクリプト内のいくつかのオカレンス..)に設定すると、問題は解決します。
すべてを false に変更する必要はありません。$stripRN
この動作に影響するのは 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;
段落や見出しなどの他のフォーマットを保持したい場合の別のオプションは、結果で独自の文字列クリーニングを実行するのinnertext
ではなく、使用することです。plaintext
パフォーマンスが低下していることは認識していますが、よりきめ細かな制御が可能です。