2011-01-27 16 views
21

Al usar PHP Simple HTML DOM Parser, ¿es normal que los saltos de línea
se eliminen?Conservar saltos de línea - Simple HTML DOM Parser

+2

Utilice el analizador dom integrado, no el simple html dom. El analizador integrado es un orden de magnitud más rápido. http://whitlock.ath.cx/FastCrawl/benchmark.php –

+4

Disculpe, @ByronWhitlock, pero no uso Simple HTML DOM Parser para velocidad, lo uso para hacer toneladas de cosas que simplemente no puedo hacer con DOMDocument, ¡y es mucho más fácil! Pero, OH <¡lo que haría por una versión de Extensión PHP de Simple HTML DOM Parser! –

Respuesta

19

Tuve problemas con esto también, ya que necesitaba el HTML para ser fácilmente editable después del procesamiento.

Aparentemente hay un booleano en el script SimpleHTMLDOM$stripRN, establecido en true en forma predeterminada. Tiras las etiquetas \r, \n o \r\n en el HTML.

Establezca la var en false (varias apariciones en el script ...) y su problema está resuelto.

+0

gracias por esta respuesta, usted acaba de salvar el día: D – mingos

+3

** Realmente ** me gustaría que esto estuviera documentado en su sitio web. ¡Salud! –

+0

¡gracias tuvo el mismo problema! – Zabs

2

Usted no tiene que cambiar todo $stripRN a falso, el único que afecta a este comportamiento es en la línea 816 '':

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

también consideran que cambiar la línea 988, ya que las funciones de varios bytes no son a menudo instalado en máquinas que no manejan idiomas no occidentales europeos. línea original en v1.5 rompe el guión de inmediato:

if (function_exists('mb_detect_encoding')) { $charset = mb_detect_encoding($this->root->plaintext . "ascii", $encoding_list = array("UTF-8", "CP1252")); } else $charset === false; 
46

Sé que esto es viejo, pero yo estaba buscando esto también, y se dio cuenta que en realidad era una construcción en la opción de desactivar la eliminación de saltos de línea . No es necesario ir a editar la fuente.

La función PHP simple HTML DOM del Analizador load es compatible con varios parámetros útiles:

load($str, $lowercase=true, $stripRN=false, $defaultBRText=DEFAULT_BR_TEXT) 

Cuando se llama a la función load, simplemente pasan false como tercer parámetro.

$html = new simple_html_dom(); 
$html->load("<html><head></head><body>stuff</body></html>", true, false); 

Si se utiliza file_get_html, es el noveno parámetro.

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) 

Editar: Para str_get_html, es el quinto parámetro (Gracias 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

Gracias .. Muy útil. ¿Soy solo yo o estos parámetros no están documentados porque durante mi vida no pude encontrar ninguna palabra oficial sobre cómo hacer esto hasta que tropecé con esto? – userabuser

+0

Me alegro de poder ayudar. No encontré ninguna documentación sobre eso tampoco. De hecho, iba a modificar la biblioteca para agregar esta funcionalidad cuando tropecé con esto. – Hiteklife

+0

@userabuser Completamente indocumentado; -/ –

-2

Otra opción debe un deseo de preservar otros formatos como los párrafos & partidas es utilizar innertext en lugar de plaintext luego realice su propia limpieza de cuerdas con el resultado.

Me doy cuenta de que hay un impacto en el rendimiento, pero permite un control más granular.

+8

-1 Eso es tan oftálico Yo sacrifiqué el karma solo para regañarte. –

1

Si pasaba por aquí preguntándose si puede hacer lo mismo en DomDocument entonces me complace decir que puede hacerlo. - pero es un poco sucio :(

que tenía un fragmento de código que quería ordenada, pero conservo la línea exacta rompe contenía (\ n) Esto es lo que hice ....

// 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); 
.

Es importante tener en cuenta que sé, sin lugar a dudas, que mi entrada solo contenía \ n. Es posible que desee sus propias variaciones si \ r \ n o \ t necesita tenerse en cuenta, por ejemplo, slash.T o slash .RN, etc.

Cuestiones relacionadas