Quando si utilizza PHP Simple HTML DOM Parser, è normale che i tag di riga
vengano eliminati?Mantieni interruzioni di riga - Simple HTML DOM Parser
risposta
Era anche in difficoltà, dal momento che avevo bisogno che l'HTML fosse facilmente modificabile dopo l'elaborazione.
Apparentemente c'è un booleano nello script SimpleHTMLDOM
$stripRN
, impostato su true
per impostazione predefinita. Toglie i tag \r
, \n
o \r\n
nel codice HTML.
Impostare la variabile su false
(diverse occorrenze nello script ..) e il problema è risolto.
Non è necessario cambiare tutto $stripRN
false, l'unico che colpisce questo comportamento è in linea 816 ``:
// load html from string
function load($str, $lowercase=true, $stripRN=false, $defaultBRText=DEFAULT_BR_TEXT) {
anche prendere in considerazione di cambiare la linea 988, in quanto le funzioni multibyte spesso non sono installato su macchine che non si occupano di lingue non-wester-europee. linea originale nella v1.5 rompe lo script subito:
if (function_exists('mb_detect_encoding')) { $charset = mb_detect_encoding($this->root->plaintext . "ascii", $encoding_list = array("UTF-8", "CP1252")); } else $charset === false;
So che questo è vecchio, ma ero alla ricerca di questo pure, e capito che c'era in realtà un costruito in opzione per disattivare la rimozione delle interruzioni di riga . Non c'è bisogno di andare a modificare la fonte.
La funzione PHP Simple HTML DOM Parser di load
supporta più parametri utili:
load($str, $lowercase=true, $stripRN=false, $defaultBRText=DEFAULT_BR_TEXT)
Quando si chiama la funzione load
, semplicemente passare false
come terzo parametro.
$html = new simple_html_dom();
$html->load("<html><head></head><body>stuff</body></html>", true, false);
Se si utilizza file_get_html
, è il nono parametro.
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)
Edit: Per str_get_html
, è il quinto parametro (Grazie yitwail)
str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
Grazie .. Molto utile. Sono solo io o sono questi parametri non documentati perché per la vita di me non sono riuscito a trovare alcuna parola ufficiale su come farlo finché non sono incappato in questo? – userabuser
Contento di aver potuto aiutare. Non ho trovato alcuna documentazione su di esso. In realtà stavo andando a modificare la libreria per aggiungere questa funzionalità da solo quando mi sono imbattuto in questo. – Hiteklife
@userabuser Completamente non documentato; -/ –
Un'altra opzione qualora si volesse preservare la loro formattazione, come i paragrafi & intestazioni è quello di utilizzare innertext
piuttosto che plaintext
quindi eseguire la propria pulizia della stringa con il risultato.
Mi rendo conto dell'esistenza di un problema di prestazioni, ma consente un controllo più granulare.
-1 È così offensivo che ho sacrificato il karma solo per sgridarti. –
Se passassi di qui a chiedermi se riesci a fare la stessa cosa in DomDocument, allora sono contento di dire che puoi! - ma è un po 'sporca :(
ho avuto un frammento di codice che volevo ordinata ma conservare la linea esatta rompe conteneva (\ n) Questo è quello che ho fatto ....
// 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);
.
È importante notare che so, senza ombra di dubbio che il mio input contenesse solo \ n. Puoi volere le tue variazioni se \ r \ n o \ t deve essere tenuto in considerazione, ad esempio slash.T or slash .RN ecc.
Utilizzare l'analizzatore dom integrato, non semplice dom in HTML. Il parser integrato è un ordine di grandezza più veloce. http://whitlock.ath.cx/FastCrawl/benchmark.php –
Mi scusi, @ByronWhitlock, ma non utilizzo Simple Parser DOM HTML per la velocità, lo uso per fare un sacco di cose che semplicemente non posso fare con il DOMDocument, ed è molto più facile! Ma, OH