» »

Mail & #353; a.k.a š v plain text ne dela?

Mail & #353; a.k.a š v plain text ne dela?

Matthai ::

Hmm, imam precej zapleten problem v zvezi s pošiljanjem maila v PHP.

Zadeva je takale. Imam spletno stran, ki teče na skripti Geeklog. Ta skripta ima možnost, da uporabniki vpisujejo nove tekste, ki jih potem odobri administrator (podobno kot Slo-Tech). Poleg tega pa je možno nastaviti, da administrator na svoj mail dobi obvestilo o novih objavah (in se potem odloči ali bodo objavljene ali ne).

Zdaj pa problem. Uporabnik v formo napiše tekst, ki vsebuje čšž. Submitta, Admin pa dobi mail, kjer je ta tekst PRAVILNO prikazan.
Namreč, pri pošiljanju maila imam nastavljen Content-Type: text/plain; charset="iso-8859-2".

VENDAR!
Če na koncu vsebine sporočila dodam še kodo za š (torej & #353; - brez presledka), se zgodi to, da v mailu vidim natančno to kvako in ne črke š. Tiste š-je, ki jih je user pred tem vpisal pa normalno prikaže.

Koda je takale:
$mailbody .= "Tole je vpra& #353;anje kako se bo videlo!\r\n\r\n";
@mail ($_CONF['site_mail'], $mailsubject, $mailbody, $mailheaders);

Če pa kot Content-Type nastavim text/html pa tega problema ni.

Stvar pa je v tem, da bi jaz rad pošiljal text/plain in znotraj njega & #353 tako, da bi se videlo kot š. Ta tekst s tako vpisanimi šumniki je namreč del jezikovne konfiguracije in ga ne morem spreminjati, ker sicer se mi podre prikaz na drugem delu sajta.
  • spremenil: Matthai ()

OwcA ::

&#353 je HTML koda in zato v plain text ne deluje.
Otroška radovednost - gonilo napredka.

BigWhale ::

Banzai!

$mailbody = str_replace("& #353;", "Shhhoomneek", $mailbody);


;)


Takole plaint text je plain text, html je pa html in NE posiljat mailov v HTML formatu...

To je nekako tako kot ce bi pesek prevazal v tistih vreckah, ki imajo zracne mehurcke.. ... zato da se ne obtolce... ;>

Matthai ::

OK, resil zadevo.. another problem. Če mi nekdo v subject sporočila, ki ga pošilja preko forme vpiše ŠČŽ, dobim X-e namesto teh znakov. Kako najbolj preprosto zamenjati te znake s SZC?

Koda:
$subject = str_replace("Č", "C", $subject);
$subject = str_replace("č", "c", $subject);
$subject = str_replace("Š", "S", $subject);
$subject = str_replace("Ž", "Z", $subject);
$subject = str_replace("š", "s", $subject);
$subject = str_replace("ž", "z", $subject);

ne dela. V formo vpišem: "Test mali: čšž, veliki: ČŠŽ", v mailu pa dobim tale subject: "Test mali: cXX, veliki: CXX"

b ::

Tole sem jaz nekje pajsnu, za sumnike v headerjih:


function rfc2047_encode($in_str, $charset) {
$out_str = $in_str;
if ($out_str && $charset) {

// define start delimimter, end delimiter and spacer
$end = "?=";
$start = "=?" . $charset . "?B?";
$spacer = $end . "\r\n " . $start;

// determine length of encoded text within chunks
// and ensure length is even
$length = 75 - strlen($start) - strlen($end);
$length = floor($length/2) * 2;

// encode the string and split it into chunks
// with spacers after each chunk
$out_str = base64_encode($out_str);
$out_str = chunk_split($out_str, $length, $spacer);

// remove trailing spacer and
// add start and end delimiters
$spacer = preg_quote($spacer);
$out_str = preg_replace("/" . $spacer . "$/", "", $out_str);
$out_str = $start . $out_str . $end;
}
return $out_str;
}

b ::

Mimogrede, tvoj prvi problem bi bil zelo enostavno resljiv, ce bi ti enostavno na konec pripopal string s š-jem namesto unim HTML zmazkom, pa ti ne bi bilo treba nic replace gor poganjat. Zakaj sploh imas string tako definiran? Jasno mi je, da pises kodo na wintendotu, in te to zafrkava, ampak to se da vse resit s spodobnim editorjem.

Pa mogoce bi lahko preden posiljas mail malo nastudiral, kaj se v mailu sme pa cesa se ne sme, pol bi vedel, zakaj si dobil tiste X-e.

BTW, tudi v body-ju je bolje, ce ni 8-bitnih znakov. Ni nujno, ce nastavis Content-Transfer-Encoding na 8bit, ampak bolj zihr je pa quoted-printable ali base64.

Matthai ::

Tnx!
Kode pa imam zato zapisane tako, ker se po mailu pošiljajo vrednosti spremenljivk iz jezikovnega fajla. Jezikovni file pa se hkrati uporablja tudi za spletno stran. So pa neke tezave z nastavitvijo charseta, ker je odvisen tudi od templata, ki ga nekdo uporablja. Nastaviti ga je treba v jezikovnem fajlu, configu in templatu, na žalost Geeklog za prikaz na webu upošteva charset templata, pri pošiljanju mailov pa charset iz configa. Pri prevodu pa sem želel narediti, da bo zadeva čimbolj prenosljiva in kompatibilna povosd in sem pač uporabil kode za čžš.

BigWhale ::

> pajsnu

;>>

b ::

Matthai: OK, that makes sense. Potem je res se najbolje, da pozenes tisti replace. Mimogrede, to kar si opisal je po mojem bug. In to tak, ki bi ga bilo skoraj nujno popravit :-)

BigWhale: ja mislim da sem na php.net najdu, ampak nisem zihr.

Zgodovina sprememb…

  • spremenilo: b ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[PHP]Zamenjava šumnikov z html kodami

Oddelek: Programiranje
152859 (1137) mikesr
»

[PHP in/ali JS] skripta, ki gre cez celo stran in zamenja tekst med custom tagi

Oddelek: Izdelava spletišč
5675 (581) jernejl
»

[php]filtriranje vsebine

Oddelek: Izdelava spletišč
7695 (582) deleted
»

Stran je UTF8 - view siource ni UTF8

Oddelek: Izdelava spletišč
81183 (1060) gregy
»

Htmlentities()

Oddelek: Programiranje
10825 (684) rc-car

Več podobnih tem