Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

196
Views
¿Cuándo uso PHP_EOL en lugar de \n y viceversa? Problema con el cliente Ajax/Jquery

Tengo un analizador php que divide una cadena dada por saltos de línea, haciendo algo como esto:

 $lines = explode(PHP_EOL,$content);

El analizador funciona bien cuando se trabaja en el lado del servidor. Sin embargo, cuando paso el contenido por publicación mediante ajax (usando el método $.post de jquery) surge el problema: no se reconocen los saltos de línea. Entonces, después de casi una hora de pruebas y dolores de cabeza, decidí cambiar PHP_EOL por "\n" y funcionó:

$líneas = explotar("\n",$contenido);

¡Ahora funciona! ¡Maldita sea, perdí tanto tiempo! ¿Alguien podría explicarme cuándo usar PHP_EOL y "\n" correctamente, para poder ahorrar tiempo en el futuro? Agradezco sus amables respuestas ;)

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

La constante PHP_EOL generalmente se debe usar para la salida específica de la plataforma.

  • Principalmente para la salida de archivos realmente.
  • En realidad, las funciones de archivo ya transforman \n ←→ \r\n en sistemas Windows a menos que se usen en modo binario fopen(…, "wb") .

Sin embargo, para la entrada de archivos , debe preferir \n . Si bien se supone que la mayoría de los protocolos de red (HTTP) usan \r\n , eso no está garantizado.

  • Por lo tanto, es mejor dividir en \n y eliminar manualmente cualquier \r opcional:

     $lines = array_map("rtrim", explode("\n", $content));

    O use la función file(…, FILE_IGNORE_NEW_LINES) de inmediato, para dejar el manejo de EOL a PHP o auto_detect_line_endings .

  • Una alternativa más robusta y concisa es usar preg_split() y una expresión regular:

     $lines = preg_split("/\R/", $content);

    El marcador de posición \R detecta cualquier combinación de \r + \n . Por lo tanto, sería más seguro e incluso funcionaría para archivos de texto ≤ 9 de MacOS clásico (rara vez se ve en la práctica).

    Nota de microoptimización obligatoria:
    Si bien la expresión regular tiene un costo, sorprendentemente a menudo es más rápida que los bucles manuales y el posprocesamiento de cadenas en PHP.

Y hay algunos ejemplos clásicos en los que debe evitar PHP_EOL debido a su ambigüedad de plataforma :

  • Generación manual de cargas útiles de protocolo de red, como HTTP sobre fsockopen() .
  • Para la construcción de mail() y MIME (que en realidad, no deberías hacer tediosamente tú mismo de todos modos).
  • Salida de archivo, si desea escribir constantemente solo saltos de línea de Unix \n independientemente del entorno.

Por lo tanto, use una combinación literal "\r\n" cuando no escriba en archivos, pero prepare datos para un contexto específico que espera saltos de línea de red .

over 4 years ago · Santiago Trujillo Report

0

PHP_EOL debe usarse al escribir resultados como archivos de registro.

Producirá el salto de línea específico para su plataforma.

over 4 years ago · Santiago Trujillo Report

0

PHP_EOL es una constante que contiene los caracteres de salto de línea utilizados por la plataforma del servidor. En el caso de Windows, es \r\n . En *nix, es \n . Aparentemente tienes un servidor de Windows.

Si estuviera en un servidor * nix, ese cambio no lo habría solucionado, porque sería \n . Si está enviando datos al cliente (es decir, el navegador), debe usar \r\n para asegurarse de que se reconozcan los saltos de línea.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!