Olivier Miakinen
2020-10-17 20:54:18 UTC
[copie et suivi vers fr.comp.lang.php]
Bonjour,
Le code est sur git et l'installation est simplissime.
Il y a juste groups.txt et config.inc.php à éditer (de mémoire, je suis
sur un smartphone). Créer le répertoire spool et changer les droits pour
que le user utilisé par le serveur http puisse écrire et créer des
fichiers dans spool.
https://gitlab.com/yamo-nntp/newsportal
Je pense avoir trouvé où ça se trouve : dans lib/post.inc.php :
==========================================================================
function message_post($subject,$from,$newsgroups,$ref,$body) {
global $server,$port,$send_poster_host,$organization,$text_error;
global $file_footer,$www_charset,$spooldir;
global $msgid_generate,$msgid_fqdn;
flush();
$ns=nntp_open($server,$port);
if ($ns != false) {
fputs($ns,"POST\r\n");
$weg=line_read($ns);
$subject = str_replace("\n","",$subject);
$subject = str_replace("\r","",$subject);
$subject = str_replace("\t"," ",$subject);
$subject = utf8_encode($subject);
fputs($ns,"User-Agent: " . mb_encode_mimeheader("NewsPortal/0.50.1b") .
"\r\n");
fputs($ns,'From: '. $from ."\r\n"); //$from est déjà encodé dans post.php
fputs($ns,'Newsgroups: '.$newsgroups."\r\n");
fputs($ns,"Mime-Version: 1.0\r\n");
fputs($ns,"Content-Type: text/plain; charset=".$www_charset.";
format=flowed\r\n");
fputs($ns,"Content-Transfer-Encoding: 8bit\r\n");
$subject= iconv ( "UTF-8", "ISO-8859-15" ,$subject );
$subject_mime=mb_encode_mimeheader( $subject,"UTF-8", "Q");
fputs($ns,'Subject: '. $subject_mime . "\r\n");
==========================================================================
Tout d'abord, je suis particulièrement surpris par :
==========================================================================
$subject= iconv ( "UTF-8", "ISO-8859-15" ,$subject );
$subject_mime=mb_encode_mimeheader( $subject,"UTF-8", "Q");
==========================================================================
Mais en fait aussi par ça qui précède :
==========================================================================
$subject = utf8_encode($subject);
==========================================================================
Si je comprends bien ce code, le paramètre $subject est supposé être
en ISO-8859-1, traduit en UTF-8 par utf8_encode(), puis traduit d'UTF-8
en ISO-8859-15 par iconv(), et enfin retraduit en UTF-8 depuis l'encodage
de mb_internal_encoding() que je suppose être ISO-8859-15.
Le résultat de tous ces transcodages, c'est que seuls les caractères qui
appartiennent à la fois à ISO-8859-1 et à ISO-8859-15 ont une chance d'en
ressortir indemne... donc par exemple pas € (dans ISO-8859-15 uniquement)
ni ½ (dans ISO-8859-1 uniquement) et encore moins √ (dans aucune des deux).
Bonjour,
Est-ce que ça servirait à quelque chose que je code moi-même une fonction
en PHP pour [coder les entêtes en MIME) ? Je n'en ai plus fait depuis PHP 4
mais je peux m'y remettre.
C'est comme tu veux. Ce serait avec plaisir que je l'incorporerais.en PHP pour [coder les entêtes en MIME) ? Je n'en ai plus fait depuis PHP 4
mais je peux m'y remettre.
Le code est sur git et l'installation est simplissime.
Il y a juste groups.txt et config.inc.php à éditer (de mémoire, je suis
sur un smartphone). Créer le répertoire spool et changer les droits pour
que le user utilisé par le serveur http puisse écrire et créer des
fichiers dans spool.
https://gitlab.com/yamo-nntp/newsportal
==========================================================================
function message_post($subject,$from,$newsgroups,$ref,$body) {
global $server,$port,$send_poster_host,$organization,$text_error;
global $file_footer,$www_charset,$spooldir;
global $msgid_generate,$msgid_fqdn;
flush();
$ns=nntp_open($server,$port);
if ($ns != false) {
fputs($ns,"POST\r\n");
$weg=line_read($ns);
$subject = str_replace("\n","",$subject);
$subject = str_replace("\r","",$subject);
$subject = str_replace("\t"," ",$subject);
$subject = utf8_encode($subject);
fputs($ns,"User-Agent: " . mb_encode_mimeheader("NewsPortal/0.50.1b") .
"\r\n");
fputs($ns,'From: '. $from ."\r\n"); //$from est déjà encodé dans post.php
fputs($ns,'Newsgroups: '.$newsgroups."\r\n");
fputs($ns,"Mime-Version: 1.0\r\n");
fputs($ns,"Content-Type: text/plain; charset=".$www_charset.";
format=flowed\r\n");
fputs($ns,"Content-Transfer-Encoding: 8bit\r\n");
$subject= iconv ( "UTF-8", "ISO-8859-15" ,$subject );
$subject_mime=mb_encode_mimeheader( $subject,"UTF-8", "Q");
fputs($ns,'Subject: '. $subject_mime . "\r\n");
==========================================================================
Tout d'abord, je suis particulièrement surpris par :
==========================================================================
$subject= iconv ( "UTF-8", "ISO-8859-15" ,$subject );
$subject_mime=mb_encode_mimeheader( $subject,"UTF-8", "Q");
==========================================================================
Mais en fait aussi par ça qui précède :
==========================================================================
$subject = utf8_encode($subject);
==========================================================================
Si je comprends bien ce code, le paramètre $subject est supposé être
en ISO-8859-1, traduit en UTF-8 par utf8_encode(), puis traduit d'UTF-8
en ISO-8859-15 par iconv(), et enfin retraduit en UTF-8 depuis l'encodage
de mb_internal_encoding() que je suppose être ISO-8859-15.
Le résultat de tous ces transcodages, c'est que seuls les caractères qui
appartiennent à la fois à ISO-8859-1 et à ISO-8859-15 ont une chance d'en
ressortir indemne... donc par exemple pas € (dans ISO-8859-15 uniquement)
ni ½ (dans ISO-8859-1 uniquement) et encore moins √ (dans aucune des deux).
--
Olivier Miakinen
Olivier Miakinen