[php / mysql] \r\n wordt niet herkend - andere ansi (?)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Het volgende probleem:

een vriend van me zat wat te stoeien met een mailprogramma en begreep niet waarom de mails met \r\n op het scherm werden weergegeven. Ik heb uiteindelijk zelf ff een dump van z'n database met de mails op m'n eigen server gezet om er naar te kijken en wat ik eerst dacht - dat het er als \\n in stond - bleek dus niet zo
wat ik ook vreemd vond was dat ze ook tussen de tekst op je scherm werden weergegeven en als ik in de source keek, stond het er precies zo.
Toen heb ik een stuk tekst uit de source gekopieerd en onder aan in m'n script (wat de data uit de database trok) die tekst in een string gegooid en daar hetzelfde mee gedaan en daar replacede hij wel netjes de \r\n voor een <br>
raar....
waar ik uiteindelijk achter ben gekomen is dat de \r\n op een of andere manier verschilt van de 'normale' \r\n - de ansii (heet dat zo?) waarde zal wel verschillen.

ik zag dat het eerste meeltje wat ik er uit trok toevallig een \r\n aan het einde had staan, dus heb ik de volgende code geschreven om dit te testen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$count = 1;
while ($row = mysql_fetch_assoc($result))
{
    if ($count == 1)
    {
        $search = substr($row['xp_body_text'], -4);
        $replace= "<br>";
    }
    echo "<u>mailtje nummer ".$count."</u><br>\n";
    echo str_replace($search, $replace, $row['xp_body_text']);

    echo "\n******************<br><br>\n";
    $count++;
}
En wonderwel gaf dat het gewenste resultaat: alles werd in <br>s omgezet.

Maar, dat is natuurlijk geen manier van werken, want niet ieder meeltje heeft dat aan het einde staan..
Een oplossing zou zijn om $search dusdanig naar een php-file weg te schrijven dat ie geinclude kan worden, maar dat vind ik eigenlijk ook niet echt een mooie oplossing. Liever zou ik gewoon weten hoe ik dat zonder zo'n omweg voor elkaar krijg. Dus hoe ik bijvoorbeeld achter het verschil kan komen tussen de 'normale' \r\n en zoals ie in die mails staat. Of iets anders....

het mailscript wat hij gebruikt heet overigens xeoport

Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk eerder dat je ascii bedoelt.
Misschien dat je eerst een SELECT moet doen met Preg Matching ?
...

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Zucht:
Newlines:
in unices (inclusief linux): \n
in macs: \r
in windows: \r\n

Alledrie kunnen ze dus voorkomen.

En als je die zo nodig door br's moet vervangen, gebruik dan gewoon de functie nl2br, die is daarvoor ontworpen. Tenzij je ze compleet wilt vervangen, dan kan je zoiets gebruiken:
$string = str_replace(array("\r\n", "\r", "\n"), "<br>", $string);
of het met een preg_replace oplossen.

Owja, 'ansi' is de standaard organisatie, niet de naam van een tekentje ;)

[ Voor 24% gewijzigd door ACM op 03-04-2003 09:22 ]


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ACM schreef op 03 April 2003 @ 09:20:
Zucht:
Newlines:
in unices (inclusief linux): \n
in macs: \r
in windows: \r\n

Alledrie kunnen ze dus voorkomen.
je sais, je sais
En als je die zo nodig door br's moet vervangen, gebruik dan gewoon de functie nl2br, die is daarvoor ontworpen.
again: je sais, je sais. Had alleen vergeten te melden dat ik uiteraard begonnen was met nl2br (het was al laat) en toen dat niet wilde werken zelf met str_replace, ereg_replace en, ja, zelfs preg_replace aan de gang ben gegaan. Alle voorbeelden die op php.net bij de user comments stonden er op los heb gelaten, maar niets mocht baten.
Je denkt toch niet dat ik voor de grap die \r\n uit het email bericht zelf ga zitten halen als ik het gewoon met m'n vingers kan intikken :)
Owja, 'ansi' is de standaard organisatie, niet de naam van een tekentje ;)
zoals ik al zei, het was laat.. :) maargoed, ik weet dus bijna zeker dat het daar aan ligt. nl2br helpt niet, en de replace functie werkt alleen met de \r\n uit de email, en niet als ik 'm zelf intype

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als je zelf '\n' intikt komt er gewoon een \ en een n natuurlijk. Eventueel als je "\n" in een php-string hebt staan, zal dat herkend worden als een newline teken.
Ik snap iig niet zo goed wat je bedoelt met 'als ik hem zelf intik'

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ok, om het te verduidelijken, de volgende voorbeelden werken niet:
PHP:
1
2
3
4
5
6
7
8
9
10
$count = 1;
$search = "\r\n";
$replace= "<br>";
while ($row = mysql_fetch_assoc($result))
{
    echo "<u>mailtje nummer ".$count."</u><br>\n";
    echo str_replace($search, $replace, $row['xp_body_text']);
    echo "\n******************<br><br>\n";
    $count++;
}
PHP:
1
2
3
4
5
6
7
8
$count = 1;
while ($row = mysql_fetch_assoc($result))
{
    echo "<u>mailtje nummer ".$count."</u><br>\n";
    echo ereg_replace("(\r\n|\n|\r)", "<br />", $row['xp_body_text']);
    echo "\n******************<br><br>\n";
    $count++;
}
PHP:
1
2
3
4
5
6
7
8
$count = 1;
while ($row = mysql_fetch_assoc($result))
{
    echo "<u>mailtje nummer ".$count."</u><br>\n";
    echo nl2br($row['xp_body_text']);
    echo "\n******************<br><br>\n";
    $count++;
}

Werkt dus allemaal niet
Het heeft tot gevolg dat er niets vervangen wordt en - wat ook zo raar is - dat ik de \r\n gewoon op m'n scherm zie tussen de tekst.
als er in en meeltje staat.
"bla di bla dibla\r\nen nog meer bla"
dan zie ik ook gewoon in m'n browser staan:
"bla di bla dibla\r\nen nog meer bla"

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dan vervang je de verkeerde tekens.
Want nu vervang je de 'betekenis van \n' en niet de 'code reeks \n'.
Vervang de " door ' in je eerste voorbeeld (of mijn voorbeeld met dat array) en het zal wat beter werken, omdat binnen ' \n en \r geen speciale betekenis hebben.
Ook kan je \\n en \\r gebruiken bij je eigen code.

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
btw, volgens mij zit er een klein bugje in de forum-code. hier is een screenshot van wat ik in eerste instantie had:
Afbeeldingslocatie: http://www.excudo.net/got/gotscrnshot.png
zoals onderaan aangegeven met een pijltje stond er een " (quote) te veel. echter dat resulteerde er in dat in m'n 'php-code' - zoals het gehighlite wordt - de \ voor beide n daaronder wegviel. Dacht, meld het ff........

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Die bug gelieve in React Bugs en Featurerequests te melden :)

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Zal ik doen, maar dat forum is alleen voor bugs met de react search, of voor freatures en dit is geen van 2 en aangezien jij hier een Devver bent dacht ik, doe het hier maar. Maargoed, zal 'm daar dan ook ff posten
btw, met die single quotes werkt het inderdaad. ik wist niet dat dat verschil kon maken. Thnx.

Acties:
  • 0 Henk 'm!

  • Ericston
  • Registratie: Maart 2001
  • Laatst online: 23-06 23:17
Het probleem is dat de CR-LF in die database staat als '\r\n' en niet als chr(0x0D) . chr(0x0A). Dan kan je proberen te replacen op "\r\n" tot je een ons weegt, maar die '\r\n' krijg je er niet uit. Die code hierboven werkt wel, maar je zit aan de verkeerde kant van je database te kloten. Zorg ervoor dat die e-mailtjes zonder escape characters in de database belanden.

Die code in je eerste post was een dikke hack trouwens, en het liet ook zien dat je de boel met escape characters en aanhalingstekens niet helemaal snapt. "\r\n" <- 2 tekens, '\r\n' <- 4 tekens. En er zijn trouwens ook geen verschillende ASCII of ANSI standaarden, om zoiets te zeggen is een contradictio in terminis.

[ Voor 7% gewijzigd door Ericston op 03-04-2003 10:34 . Reden: hehe ]


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ericston schreef op 03 april 2003 @ 10:30:
Het probleem is dat de CR-LF in die database staat als '\r\n' en niet als chr(0x0D) . chr(0x0A). Dan kan je proberen te replacen op "\r\n" tot je een ons weegt, maar die '\r\n' krijg je er niet uit. Die code hierboven werkt wel, maar je zit aan de verkeerde kant van je database te kloten. Zorg ervoor dat die e-mailtjes zonder escape characters in de database belanden.
zoals ik al schreef probeerde ik alleen een vriend van me te helpen die van een bestaand mailproggie gebruik maakt. Het is dus niet zo dat ik het zo in de database zet. ik probeerde alleen een oplossing voor zijn probleem te vinden. En aangezien hij nog maar net met php bezig is denk ik niet dat ie dat bestaande mailproggie dusdanig gaat hacken dat het op een goede manier gebeurt. Maar zal 'm er van op de hoogte brengen dat het dus ***** werkt
Die code in je eerste post was een dikke hack trouwens, en het liet ook zien dat je de boel met escape characters en aanhalingstekens niet helemaal snapt. "\r\n" <- 2 tekens, '\r\n' <- 4 tekens. En er zijn trouwens ook geen verschillende ASCII of ANSI standaarden, om zoiets te zeggen is een contradictio in terminis.
ik zocht gewoon naar een zo goed mogelijke verklaring.....

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Het wordt niet direct gezegd, maar als je alles goed leest dan zou dit de oplossing moeten zijn:
PHP:
1
$string = str_replace(array('\r\n', '\r', '\n'), '<br>', $string);

(let op de enkele quotes)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
crisp schreef op 03 April 2003 @ 11:13:
Het wordt niet direct gezegd, maar als je alles goed leest dan zou dit de oplossing moeten zijn:
PHP:
1
$string = str_replace(array('\r\n', '\r', '\n'), '<br>', $string);

(let op de enkele quotes)
marty schreef op 03 April 2003 @ 10:29:
[...]
btw, met die single quotes werkt het inderdaad. ik wist niet dat dat verschil kon maken. Thnx.
evengoed bedankt :)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

marty schreef op 03 april 2003 @ 10:29:
Zal ik doen, maar dat forum is alleen voor bugs met de react search, of voor freatures en dit is geen van 2

Bugs met de react search of features :?
Waar staat dat nou weer?
React Bugs en Featurerequests
Hier kan je al je bugmeldingen kwijt met betrekking tot de forumsoftware React.
Lijkt me toch overduidelijk voor alle bugs gelden :)

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ACM schreef op 03 April 2003 @ 12:40:
[nohtml]
[...]

Lijkt me toch overduidelijk voor alle bugs gelden :)
Nou, toch niet. Ik hoor de term React hier altijd alleen maar icm de zoekmachine en ging er van uit dat 'de forumsoftware React' gewoon een aparte module was die achter dit forum hing (en waar nogal wat aan gesleuteld wordt)

moet toegeven...had evengoed wel kunnen bedenken dat ik ook in dat geval er ook voor andere bugs terecht kon :)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Niks andere bugs...
React IS de forumsoftware en de searchengine is een module ervoor...
Dus dat forum is bedoeld voor bugs in de forumsoftware en de searchengine :)

Waarom denk je dan dat boven en onder elke pagina hier 'Powered by React' staat?

[ Voor 20% gewijzigd door ACM op 03-04-2003 13:02 ]


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
het begint nu wel heel erg offtopic te worden, maargoed zolang je er zelf nog geen slotje op gooit :) :
omdat de search engine zo'n beetje het belangrijkste onderdeel van dit forum is. net als dat er ergens staat: powered by intel. dat zegt ook niets over de capaciteit van bijv. de harde schijf die er in zit

edit:
tja..het is meer gewoon een idee wat ik in m'n hoofd had. het is niet zo dat ik er een studie van heb gemaakt in hoeverre react tot de algehele forumsoftware behoorde. Toen ik net die bug moest posten dacht ik gewoon: ohnee, Reactbugs - en dit heeft geen betrekking op de search, nouja, ACM is toch Devver en die leest het topic, dus zet het daar wel neer.
idd, als ik even verder na had gedacht, had ik het gewoon in het bug forum gezet......

[ Voor 43% gewijzigd door marty op 03-04-2003 13:13 ]

Pagina: 1