Spoiler schrieb:
Wenn ich das Script von der Shell aus per Hand starte, werden die Sonderzeichen korrekt übermittelt und sehen dann in der ankommenden Mail auch sauber aus.
Wenn ich das Ding aber per Cron starte, verhunzt er mit die Sonderzeichen ... Cron hat also offenbar einen anderen Zeichensatz aktiv.
Warum eigentlich und wie stelle ich für Cron den gleichen Zeichensatz ein wie die Shell ihn benutzt?
Cronjobs laufen halt mit einer anderen Umgebung und oft auch mit einem anderen Benutzer (typischerweise "root"). Dessen Umgebung wird anders definiert als die in Deinem interaktiven Terminal.
Du kannst für Cron-Jobs eine Umgebungsvariable auf die gewünschte Sprache setzten (siehe Cron). Oder Du machst das in Deinem PHP-Skript. Typischerweise setzt man "LANG=de_DE.UTF-8" für Deutsch. In beiden Fällen wirkt die Einstellung auf Dein gesamtes Skript. Wenn Du das nur für den einzelnen Aufruf machen willst, kannst Du das auch so machen:
| shell_exec('export LANG=de_DE.UTF-8; echo "Hallo, anbei die gewünschten Dateien." | mutt -s "Überlauf-Auswertung" ...'
|
Wenn Du erst mal herausfinden möchtest, was unter Cron wirkt, kannst Du einen Job einrichten, der diesen Befehl ausführt:
| /usr/bin/locale >/tmp/locale.txt
|
Hinterher findest Du dann in /tmp/locale.txt die Informationen.