Autor Zpráva
chudst
Profil
Zdravím, poprosím o pomoc s řešením následujícího drobného problému: ze stránek posílám na email registrovanému uživateli email. Vše funguje v pohodě, až na jednu věc: pokud se zde vyskytuje odstavec, hodí mi to za ním " \r\n". (Text ukládám přes TinyMCE do databáze).

Vypadá to takto: http://chudst.cz/rnstranky.jpg

A zdrojový kód je zde:

<?php
$site_name = "XYZ";
$site_email = "XYZ@XYZ.cz";
$subject = "=?utf-8?B?".base64_encode($nadpis)."?="; 
      
$message = "<body style='background-color: #21511d;'>
  <center>
      <table style='width: 700px; border: 1px solid; background-color: #e2f6db;'>
      <tr><th style='background-color: #b4c7ad; font: bold; height: 50px;'>" . mb_strtoupper($nadpis,'utf-8') . "</th></tr>
      <tr><td>
            <p><b>Zdravíčko $uzivatel_osloveni!</b></p>
            $zprava    //zde se odesílá zpráva
            <p style='margin-bottom: 15px;'><b>Tolik z novinek, měj se famfárově :)</b></p>         
       </td></tr>
       <tr><td style='background-color: #b4c7ad;'>
              <p style='margin: 5px 0px 5px 0px; text-align: center;'><small><b>Tento email byl odeslán ze stránek: <a href='http://XYZ.cz/' style='color: #008000; text-decoration: none;'>http://XYZ.cz</a>.</b></small></p>
       </td></tr>
    </table>
  </center>
  </body>";

$hlavicka_emailu = "MIME-Version: 1.0\n"; 
$hlavicka_emailu .= "Content-Type: text/html; charset=utf-8\n"; 
$hlavicka_emailu .= "From: =?UTF-8?B?".base64_encode($site_name)."?=<$site_email>\n";
            
mail($uzivatel_email, $subject, $message, $hlavicka_emailu);  
?>

Zdrojový kód odeslaného textu do databáze:

<p><em>Dovolte, aby som Vas touto cestou oslovil s moznostou uplatnenia sa na trhu prace a to hned v segmente 5*, kde nas hotel je za svoje necele 3 roky fungovania na slovenskom trhu opatovne hodnoteny ci uz ako najlepsi hotel na Slovensku alebo najlepsia hotelova restauracia apod.</em></p>
<p><em>Vdaka nasmu korporatnemu program pre pracu s talentami, vieme kazdorocne ponuknut niekolko volnych pracovnych miest aj mladym, ambicioznym studentom, dobre hovoriacim po anglicky a najma s vasnou pre tuto pracu. Pod vedenim svetovych expertov v hotelierstve a gastronomii, nasich zahranicnych kolegov managerov, tak maju moznost vstupit do sveta TOP hotelierstva v domovskej krajine. A postupnou pracou u nas rozvijat svoj talent aj v “sieti “nasich hotelov celosvetovo.</em></p>
<p><em>Za 3 roky fungovania su to realne mena uspeschnych absolventov, ktori dnes rozvijaju svoj telant aj v destinaciach ako Seychelly, Malta, Cina, Belgicko ci susedne Rakusko. Viac info o tomto programe najdete na nasich strankach. </em></p>
Tori
Profil
chudst:
Někde se vám to dvakrát escapuje. Nevím v jakém pořadí co kam ukládáte, takže: pokud chybný vstup přijde z formuláře, tak se koukněte do FAQ: Nejčastější potíže s PHP (FAQ) » Lomítka ve vstupních hodnotách . Pokud chybná data přijdou z DB, koukněte se třeba v PhpMyAdmin, jestli jsou uložená v pořádku, a pak projděte ukládání/čtení z DB, jestli v kódu není nějaké volání addslashes.
chudst
Profil
Chybný vstup jde z formuláře (je totožný s tím, jaký se ukládá do databáze - text výše je přímo zkopírován z databáze), ale pokud daný text dodám "natvrdo" do zdrojového kódu, email se odešle normálně a \r\n mi to za odstavcem nevypisuje.

S lomítky problém není, spíše se zalomením. Zkusil jsem použít stripslashes($zprava) - to v pořádku odstraní lomítka, ale zůstávají tam písmena místo \r\n, tak rn.
chudst
Profil
Já jsem opravdu kůň. Mě nenapadlo se podívat na výstup, jak se to zobrazuje přímo v mailu. Jako prostý text, takže to šlo nahradit pomocí:
$zprava_bez_rn = str_replace(array("\\n", "\\r"),"",$zprava); 

Každopádně - děkuji za snahu ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: