2011-01-27 7 views
21

PHP Simple HTML DOM Parserを使用している場合、改行コード
は削除されているのが普通ですか?改行を保持する - 単純なHTML DOMパーサー

+2

シンプルなHTML DOMではなく、組み込みのDOMパーサーを使用します。組み込みのパーサは、一桁高速です。 http://whitlock.ath.cx/FastCrawl/benchmark.php –

+4

すみません、@ByronWhitlockですが、単純なHTML DOM Parserを使用していません。DOMDocumentではできないたくさんのことを行うために使用しています。それはずっと簡単です!しかし、OH <シンプルなHTML DOM ParserのPHPエクステンション版ではどうしたらいいですか? –

答えて

19

私はHTMLを処理後に簡単に編集できるようにしなければならないので、これも苦労しました。

SimpleHTMLDOMスクリプト$stripRNには真偽値がありますが、デフォルトではtrueに設定されています。 HTML内の\r,\nまたは\r\nタグを削除します。

false(スクリプト内のいくつかの出現箇所。)にVARを設定し、あなたの問題が解決されます。あなたはfalseにすべて$stripRNを変更する必要はありません

+0

この回答をいただきありがとうございました。あなたはその日を保存しました:D – mingos

+3

私は本当に**これが彼らのウェブサイトに記載されたことを望みます。歓声メイト! –

+0

同じ問題がありました! – Zabs

2

、この動作に影響を与え一方のみがライン816 ``である:マルチバイト関数は、多くの場合ではないので

// load html from string 
function load($str, $lowercase=true, $stripRN=false, $defaultBRText=DEFAULT_BR_TEXT) { 

はまた、ライン988を変更することを検討しますnon-wester-european言語を扱わないマシンにインストールされます。 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; 
46

私はこれが古いですけど、私もこれを探していた、と改行の除去をオフにするオプションに内蔵され、実際にあった実現しました。ソースを編集する必要はありません。

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を使用している場合、これは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) 

編集:1のような他の段落として書式設定&見出しを保持したいはずです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) 
+1

ありがとう..とても役に立ちました。私の人生の間、私はこれを遭遇するまでこれを行う方法について正式な言葉を見つけることができなかったので、それは私だけか、これらのパラメータは書かれていませんか? – userabuser

+0

うれしい私は助けることができます。私はそれについて書類も見つけられませんでした。私は実際にこれを見つけたときに、この機能を自分自身に追加するためにライブラリをmodにしようとしていました。 – Hiteklife

+0

@userabuser完全に文書化されていない; -/ –

-2

だというplaintextよりもinnertextを使用することです結果を使用して独自の文字列クリーニングを実行します。

パフォーマンスが低下していることがわかりましたが、より細かい制御が可能です。

+8

-1それは非常に専門的です。私はただあなたを叱るためにカルマを犠牲にしました。 –

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を考慮する必要がある場合は、 。RNなど

関連する問題