Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Fonction améliorée pour les entêtes dans Newsportal (was: Essai avec le mot « Nullième » Agent Unicode Extension beta version 0.3.2020.700)

4 views
Skip to first unread message

Olivier Miakinen

unread,
Oct 17, 2020, 4:54:19 PM10/17/20
to
[copie et suivi vers fr.comp.lang.php]

Bonjour,

Le 17/10/2020 22:14, yamo' me répondait :
>
>> 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.
> 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).

--
Olivier Miakinen

yamo'

unread,
Oct 18, 2020, 4:52:22 AM10/18/20
to
Salut,


Olivier Miakinen a écrit :

> [copie et suivi vers fr.comp.lang.php]

[.........]

> 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).


Merci, tu as mis le doigt sur ce qui n'allait pas et que je ne voyais plus
à force de modifier le code un peu à l'aveuglette!

Grâce à toi, j'ai nettoyé le code et je suis arrivé à quelque chose
de plus logique :

<URL:https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php>

Mais je suis bien conscient que c'est encore très perfectible... Mais au
moins c'est d'après mes tests fonctionnel...


--
Stéphane


Olivier Miakinen

unread,
Oct 18, 2020, 8:42:10 AM10/18/20
to
Le 18/10/2020 10:52, yamo' a écrit :
>
> [...]
>
>> ni ½ (dans ISO-8859-1 uniquement) et encore moins √ (dans aucune des
> deux).

Tiens, voilà un autre petit bug : en coupant la ligne à cause du format
flowed, la fin de la ligne citée s'est retrouvée non citée.

Il aurait mieux valu ne pas la couper du tout (puisque moi je n'étais pas
en format flowed et que même en rajoutant un chevron ça reste très loin
des 998 caractères maximum), ou au pire rajouter un chevron devant le
« deux). » aussi.

> Grâce à toi, j'ai nettoyé le code et je suis arrivé à quelque chose
> de plus logique :
>
> <URL:https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php>
>
> Mais je suis bien conscient que c'est encore très perfectible... Mais au
> moins c'est d'après mes tests fonctionnel...

§
> fputs($ns,'Subject: ' . mb_encode_mimeheader( $subject,mb_internal_encoding(), "Q", " \r\n"). "\r\n");
§

L'idéal serait quand même que tout soit en UTF-8 le plus tôt possible, et
d'avoir :
mb_internal_encoding("UTF-8");

ainsi que :
mb_encode_mimeheader($subject, "UTF-8", "Q", "\r\n");

Est-ce que tu as essayé de mettre un « √ » dans le titre ? Tiens, j'en ajoute
un avant que tu me répondes.

--
Olivier Miakinen

yamo'

unread,
Oct 18, 2020, 1:35:02 PM10/18/20
to
Olivier Miakinen a écrit :

> Le 18/10/2020 10:52, yamo' a écrit :
>>
>> [...]
>>
>>> ni ½ (dans ISO-8859-1 uniquement) et encore moins √ (dans aucune des
>> deux).

> Tiens, voilà un autre petit bug : en coupant la ligne à cause du format
> flowed, la fin de la ligne citée s'est retrouvée non citée.


Oui, ce n'est pas la première fois que je vois le bug.
Je ne pense pas que ce soit du à une mauvaise saisie sur smartphone.

Tout comme Newsportal a tendance a ajouter une ligne entre les niveaux de
citations différents.
C'est une partie du code que je n'ai pas du tout regardé.




> Il aurait mieux valu ne pas la couper du tout (puisque moi je n'étais pas
> en format flowed et que même en rajoutant un chevron ça reste très loin
> des 998 caractères maximum), ou au pire rajouter un chevron devant le
> « deux). » aussi.

>> Grâce à toi, j'ai nettoyé le code et je suis arrivé à quelque chose
>> de plus logique :
>>
>> <URL:https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php>
>>
>> Mais je suis bien conscient que c'est encore très perfectible... Mais au
>> moins c'est d'après mes tests fonctionnel...

> §
>> fputs($ns,'Subject: ' . mb_encode_mimeheader(
$subject,mb_internal_encoding(), "Q", " rn"). "rn");
> §

> L'idéal serait quand même que tout soit en UTF-8 le plus tôt possible, et
> d'avoir :
> mb_internal_encoding("UTF-8");

Je vais le mettre au niveau de config.inc.php qui est toujours inclus.
Je l'avais fait mais comme je n'avais pas vu de changement...



> ainsi que :
> mb_encode_mimeheader($subject, "UTF-8", "Q", "rn");

J'ai essayé un peu toutes les options sauf celle là.
J'essayerais demain.

> Est-ce que tu as essayé de mettre un « √ » dans le titre ? Tiens, j'en
ajoute
> un avant que tu me répondes.

On va voir...

--
Stephane sur smartphone, l'interface est encore à améliorer en cas de
longues lignes



Olivier Miakinen

unread,
Oct 19, 2020, 3:32:33 AM10/19/20
to
Le 18/10/2020 19:35, yamo' m'a répondu :
>
>> Est-ce que tu as essayé de mettre un « √ » dans le titre ? Tiens, j'en
> ajoute
>> un avant que tu me répondes.
>
> On va voir...

C'est parfait, et j'ai aussi vu les tests que tu as faits dans fr.test.

Quant à moi, j'ai presque fini de coder ma fonction améliorée. J'en suis
déjà à plus de 300 lignes (code et commentaires) et je teste cette fonction
avec un PHP 7.2.


--
Olivier Miakinen

yamo'

unread,
Oct 19, 2020, 4:01:29 AM10/19/20
to
Salut,

Je m'astreins à poster avec newsportal mais, je préfère utiliser la
couche mailnews de Seamonkey...

Olivier Miakinen a écrit :

> Le 18/10/2020 10:52, yamo' a écrit :
>>
>> [...]
>>
>>> ni ½ (dans ISO-8859-1 uniquement) et encore moins √ (dans aucune des
>> deux).

> Tiens, voilà un autre petit bug : en coupant la ligne à cause du format
> flowed, la fin de la ligne citée s'est retrouvée non citée.

> Il aurait mieux valu ne pas la couper du tout (puisque moi je n'étais pas
> en format flowed et que même en rajoutant un chevron ça reste très loin
> des 998 caractères maximum), ou au pire rajouter un chevron devant le
> « deux). » aussi.

Je pense que le coupable est là :

for ($i=0; $i<count($b); $i++) {
if ((strpos(substr($b[$i],0,strpos($b[$i]," ")),">") != false) |
(strcmp(substr($b[$i],0,1),">") == 0)) {
$body .= textwrap(stripSlashes($b[$i]),78," rn")."rn";
} else {
$body .= textwrap(stripSlashes($b[$i]),74," rn")."rn";
}
}

Et je pense que les retours de chariots en trop viennent aussi de là.
Pour moi dans le body c'est des 'n' et pas "rn"? Ou c'est comme dans les
entêtes? Je n'ai pas trouvé la RFC. Nemo avait évité ce bug, la
solution a peut-être été postée ici-même.

<URL:https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php>


>> Grâce à toi, j'ai nettoyé le code et je suis arrivé à quelque chose
>> de plus logique :
>>
>> <URL:https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php>
>>
>> Mais je suis bien conscient que c'est encore très perfectible... Mais au
>> moins c'est d'après mes tests fonctionnel...

> §
>> fputs($ns,'Subject: ' . mb_encode_mimeheader( $subject,mb_internal_encoding(), "Q", " rn"). "rn");
> §

Grâce au code de Julien Élie les '' devant r et n sont de retour dans
l'affichage de ton post et la réponse. Le bug des coupures est aussi là.
Newsportal devrait laisser les citations intactes comme le fait par
exemple Pan.


> L'idéal serait quand même que tout soit en UTF-8 le plus tôt possible, et
> d'avoir :
> mb_internal_encoding("UTF-8");

C'est fait.
Je ne sais pas si c'est lié mais la liste des groupes a au moins un bug
d'encodage : <http://news2web.pasdenom.info/index.php>
Le code de news2web.pasdenom.info n'est pas tout le temps à jour : je
suis fâché avec git et je fais les mises à jours à coup de rm et de
git clone...
Les méthodes normales me donnent des messages d'erreur mais je suis plus
à l'aise avec svn que git...


> ainsi que :
> mb_encode_mimeheader($subject, "UTF-8", "Q", "rn");

Pas encore adopté. Je me demande si c'est utile par rapport au code
existant.

> Est-ce que tu as essayé de mettre un « √ » dans le titre ? Tiens, j'en ajoute
> un avant que tu me répondes.

À priori c'est bon.
J'ai quelques bugs sur des messages de Pan et Gnus mais je n'arrive pas à
trouver une cause crédible.

--
Stéphane




yamo'

unread,
Oct 19, 2020, 4:04:48 AM10/19/20
to
Olivier Miakinen a écrit :
Merci d'avance :)




yamo'

unread,
Oct 19, 2020, 6:56:02 AM10/19/20
to
yamo' a écrit :
Pour information, en adaptant un code perl dont j'ai eu besoin.
Je vais permettre l'envoi comme un "serveur" nntp avec les entêtes
injection-* correctement mises à jour. Cette idée m'a été soufflée
par Gérald sur fr.usenet.distribution.



--
Stéphane







Olivier Miakinen

unread,
Oct 19, 2020, 7:04:09 AM10/19/20
to
Bonjour,

Je rappelle ici le lien :
<URL:https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php>

Le 19/10/2020 10:01, yamo' a écrit :
>
>> Tiens, voilà un autre petit bug : en coupant la ligne à cause du format
>> flowed, la fin de la ligne citée s'est retrouvée non citée.
>
>> Il aurait mieux valu ne pas la couper du tout (puisque moi je n'étais pas
>> en format flowed et que même en rajoutant un chevron ça reste très loin
>> des 998 caractères maximum), ou au pire rajouter un chevron devant le
>> « deux). » aussi.
>
> Je pense que le coupable est là :
>
> for ($i=0; $i<count($b); $i++) {
> if ((strpos(substr($b[$i],0,strpos($b[$i]," ")),">") != false) |
> (strcmp(substr($b[$i],0,1),">") == 0)) {
> $body .= textwrap(stripSlashes($b[$i]),78," rn")."rn";
> } else {
> $body .= textwrap(stripSlashes($b[$i]),74," rn")."rn";
> }
> }

En effet. Je ne sais pas si c'est autorisé en format flowed, mais au
moins en format fixed il ne faut faire aucun textwrap sur une ligne
qui commence par un ">".

Par ailleurs, tu as un autre problème quand tu écris avec NewsPortal,
à savoir que tous les antislashs (\) se font bouffer.

> Et je pense que les retours de chariots en trop viennent aussi de là.
> Pour moi dans le body c'est des 'n' et pas "rn"? Ou c'est comme dans les
> entêtes? Je n'ai pas trouvé la RFC. Nemo avait évité ce bug, la
> solution a peut-être été postée ici-même.

C'est pour ça que tu as cette instruction en ligne 125 ?
$body=str_replace("\r",'',$body);

Je crois que tous les protocoles TCP/IP en mode texte définis par des RFC
standards demandent que *toutes* les lignes soient délimitées par CR+LF
(\r\n) et jamais par LF seul. Donc oui, le body aussi.

Mais en général on programme avec des \n seuls, et c'est seulement au moment
d'envoyer le résultat en TCP/IP que l'on transforme les \n en \r\n. Je ne sais
pas si c'est facile à faire dans NewsPortal.

>
>> L'idéal serait quand même que tout soit en UTF-8 le plus tôt possible, et
>> d'avoir :
>> mb_internal_encoding("UTF-8");
>
> C'est fait.

Ok.

> Je ne sais pas si c'est lié mais la liste des groupes a au moins un bug
> d'encodage : <http://news2web.pasdenom.info/index.php>

Ah oui : « fr.* (hiérarchie francophone) »

Généralement c'est dû au résultat d'un iconv ou d'un utf8_encode sur un
texte qui était déjà en UTF-8. À terme, lorsque tout sera nativement
en UTF-8, il ne devrait plus y avoir aucun appel à ces fonctions de
transcodage hormis lors de la lecture d'un article venant de l'extérieur
et déclarant un autre charset.

>> ainsi que :
>> mb_encode_mimeheader($subject, "UTF-8", "Q", "rn");
>
> Pas encore adopté. Je me demande si c'est utile par rapport au code
> existant.

À partir du moment où tu as fait mb_internal_encoding("UTF-8"), et donc
que mb_internal_encoding() retorune "UTF-8", c'est équivalent à ton code
actuel.

De toute façon, quand j'aurai fini de coder, il n'y aura plus aucun appel
à mb_encode_mimeheader() puisque j'ai codé moi-même les encodages QP et
Base64.

>> Est-ce que tu as essayé de mettre un « √ » dans le titre ? Tiens, j'en ajoute
>> un avant que tu me répondes.
>
> À priori c'est bon.
> J'ai quelques bugs sur des messages de Pan et Gnus mais je n'arrive pas à
> trouver une cause crédible.

Peut-être un titre en 8-bits brut ? Si tu me donnes des MID je peux regarder.


--
Olivier Miakinen

yamo'

unread,
Oct 19, 2020, 10:20:16 AM10/19/20
to
Olivier Miakinen a écrit :

> Bonjour,

> Je rappelle ici le lien :
> <URL:https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php>

> Le 19/10/2020 10:01, yamo' a écrit :
>>
>>> Tiens, voilà un autre petit bug : en coupant la ligne à cause du format
>>> flowed, la fin de la ligne citée s'est retrouvée non citée.
>>
>>> Il aurait mieux valu ne pas la couper du tout (puisque moi je n'étais pas
>>> en format flowed et que même en rajoutant un chevron ça reste très loin
>>> des 998 caractères maximum), ou au pire rajouter un chevron devant le
>>> « deux). » aussi.
>>
>> Je pense que le coupable est là :
>>
>> for ($i=0; $i<count($b); $i++) {
>> if ((strpos(substr($b[$i],0,strpos($b[$i]," ")),">") != false) |
>> (strcmp(substr($b[$i],0,1),">") == 0)) {
>> $body .= textwrap(stripSlashes($b[$i]),78," rn")."rn";
>> } else {
>> $body .= textwrap(stripSlashes($b[$i]),74," rn")."rn";
>> }
>> }

> En effet. Je ne sais pas si c'est autorisé en format flowed, mais au
> moins en format fixed il ne faut faire aucun textwrap sur une ligne
> qui commence par un ">".

C'est ce qu'il me semblait.

> Par ailleurs, tu as un autre problème quand tu écris avec NewsPortal,
> à savoir que tous les antislashs () se font bouffer.

Oui, normalement c'est résolu : j'ai reporté le code ee Julien Élie sur
la version que j'utilise.

>> Et je pense que les retours de chariots en trop viennent aussi de là.
>> Pour moi dans le body c'est des 'n' et pas "rn"? Ou c'est comme dans les
>> entêtes? Je n'ai pas trouvé la RFC. Nemo avait évité ce bug, la
>> solution a peut-être été postée ici-même.

> C'est pour ça que tu as cette instruction en ligne 125 ?
> $body=str_replace("r",'',$body);

Je ne sais pas, je pense que ça fait partie du code historique.


> Je crois que tous les protocoles TCP/IP en mode texte définis par des RFC
> standards demandent que *toutes* les lignes soient délimitées par CR+LF
> (rn) et jamais par LF seul. Donc oui, le body aussi.

Merci, comme c'est super général je ne l'avais pas trouvé.

> Mais en général on programme avec des n seuls, et c'est seulement au moment
> d'envoyer le résultat en TCP/IP que l'on transforme les n en rn. Je ne sais
> pas si c'est facile à faire dans NewsPortal.

>>
>>> L'idéal serait quand même que tout soit en UTF-8 le plus tôt possible, et
>>> d'avoir :
>>> mb_internal_encoding("UTF-8");
>>
>> C'est fait.

> Ok.

>> Je ne sais pas si c'est lié mais la liste des groupes a au moins un bug
>> d'encodage : <http://news2web.pasdenom.info/index.php>

> Ah oui : « fr.* (hiérarchie francophone) »

> Généralement c'est dû au résultat d'un iconv ou d'un utf8_encode sur un
> texte qui était déjà en UTF-8. À terme, lorsque tout sera nativement
> en UTF-8, il ne devrait plus y avoir aucun appel à ces fonctions de
> transcodage hormis lors de la lecture d'un article venant de l'extérieur
> et déclarant un autre charset.

Oui, ce serait bien d'avoir quelque chose de plus logique.

>>> ainsi que :
>>> mb_encode_mimeheader($subject, "UTF-8", "Q", "rn");
>>
>> Pas encore adopté. Je me demande si c'est utile par rapport au code
>> existant.

> À partir du moment où tu as fait mb_internal_encoding("UTF-8"), et donc
> que mb_internal_encoding() retorune "UTF-8", c'est équivalent à ton code
> actuel.

> De toute façon, quand j'aurai fini de coder, il n'y aura plus aucun appel
> à mb_encode_mimeheader() puisque j'ai codé moi-même les encodages QP et
> Base64.

Ah tant mieux!

>>> Est-ce que tu as essayé de mettre un « √ » dans le titre ? Tiens, j'en ajoute
>>> un avant que tu me répondes.
>>
>> À priori c'est bon.
>> J'ai quelques bugs sur des messages de Pan et Gnus mais je n'arrive pas à
>> trouver une cause crédible.

> Peut-être un titre en 8-bits brut ? Si tu me donnes des MID je peux regarder.


J'en avais mais la suppression des fichiers dans spool a corrigé le
problème (ce devait être un cache d'une version d'une début).

Par contre, j'ai trouvé un cas :
http://news2web.pasdenom.info/article.php?id=5256&group=fr.comp.usenet.lecteurs-de-news#5256
<rj2lip$274l$1...@cabale.usenet-fr.net>


C'est sur une autre partie du code que ça déconne : l'affichage du
thread lié à l'article.

Sur fr.test, je ne sais pas si c'est une référence en ce moment :P

<http://news2web.pasdenom.info/article.php?id=30322&group=fr.test#30322>
<V6Oo4sl1iw7_63ZtYbYjOcsy0xc@jntp>
Grace au Xref voici l'URL (lien absent car thread.inc.php a échoué) :
<http://news2web.pasdenom.info/article.php?id=30362&group=fr.test#30322>
<NX5y9-SJh2MjWb3V49QKiwECVLk@jntp>
<http://news2web.pasdenom.info/article.php?id=30363&group=fr.test>


Un que tu connais :
<http://news2web.pasdenom.info/article.php?id=30308&group=fr.test#30308>

Le code source est artistique : <rmjtgj$dbf$1...@pasdenom.info>

<rmhoqv$1q5r$8...@cabale.usenet-fr.net>

Le carré blanc (!) : <OtpJSo-jicO5NVWcqy8hBQ9dbhI@jntp>
<http://news2web.pasdenom.info/article.php?id=30339&group=fr.test#30341>


Il y avait aussi les posts de Dom Féranpière©® et les réponses avant
qu'il ne corrige son lecteur de news...

--
Stéphane




yamo'

unread,
Oct 19, 2020, 11:44:33 AM10/19/20
to
yamo' a écrit :



> Pour information, en adaptant un code perl dont j'ai eu besoin.
> Je vais permettre l'envoi comme un "serveur" nntp avec les entêtes
> injection-* correctement mises à jour. Cette idée m'a été soufflée
> par Gérald sur fr.usenet.distribution.

Ça va être plus compliqué que prévu...
Je n'ai pas trouvé la fonction Ihave et mon essai avec command a échoué.







Gérald Niel

unread,
Oct 19, 2020, 1:05:26 PM10/19/20
to
Le Lundi 19 octobre 2020 à 15:44 UTC, yamo' écrivait sur
fr.comp.lang.php :
Ce n'est pas ce que j'ai suggéré, et ça n'est pas une bonne idée.
NewsPortal est un client NNTP.

Il est fort possible qu'à l'époque de l'écriture de NewsPortal les
fonctions IMAP de PHP n'existaient pas.

https://www.php.net/manual/fr/ref.imap.php

Hors ces fonctions permettent de se connecter à un serveur nntp en
mode client.
À explorer…

@+
--
On ne le dira jamais assez, l'anarchisme, c'est l'ordre sans le
gouvernement ; c'est la paix sans la violence. C'est le contraire
précisément de tout ce qu'on lui reproche, soit par ignorance, soit
par mauvaise foi. -+- Hem Day -+-

Olivier Miakinen

unread,
Oct 19, 2020, 3:30:00 PM10/19/20
to
Le 17/10/2020 22:54, j'écrivais :
>>
>>> 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 fait.

Il y a un fichier mime.inc.php à inclure. Ce fichier fait 550 lignes dont
un bon tiers de commentaires explicatifs au début − sans compter les autres
commentaires parsemés un peu partout dans le code.

Note que je n'utilise aucune fonction de gestion des charsets, ni rien pour
encoder en QP ou en Base64, tout est fait à la mimine. Les fonctions externes
que j'utilise sont :
- pour les chaînes de caractères : strlen(), substr(), sprintf() et ord() ;
- pour les regexp : preg_match() et preg_split() ;
- pour les tableaux : count() ;
et je crois bien que c'est tout.

En outre je ne pollue pas l'espace de noms car je n'ai rien défini d'autre
que deus classes : HeaderTools et MimeEncodeHeader. Tout est fait dedans.


Mais je ne suis pas encore au point pour utiliser Git, alors pour le moment
j'ai mis le fichier mime.inc.php sur cjoint :

<https://www.cjoint.com/c/JJttn5IYkLA>

Attention, je pense qu'ouvrir le fichier directement ne fonctionne pas, en
tout cas ça n'a pas marché pour moi. Mais le télécharger sur le disque pour
l'ouvrir ensuite, ça marche bien.

--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 19, 2020, 4:19:05 PM10/19/20
to
Le 19/10/2020 16:20, yamo' a écrit :
>
> Par contre, j'ai trouvé un cas :
> http://news2web.pasdenom.info/article.php?id=5256&group=fr.comp.usenet.lecteurs-de-news#5256
> <rj2lip$274l$1...@cabale.usenet-fr.net>

http://al.howardknight.net/?ID=160313710300
§
Subject: MicroPlanet-Gravity et MIME, bis (was:
=?iso-8859-15?Q?Vernir_=E0_la_r=E9sine_=E9poxyde_??=)
§

Oui, c'est un bug de MicroPlanet-Gravity qu'il faudrait effectivement
gérer dans NewsPortal : quand quelque chose ressemble à un encoded-word
MIME mais n'en est pas un − ici parce qu'il contient un point
d'interrogation non encodé − il faudrait afficher la chaîne telle
quelle.

> C'est sur une autre partie du code que ça déconne : l'affichage du
> thread lié à l'article.
>
> Sur fr.test, je ne sais pas si c'est une référence en ce moment :P
>
> <http://news2web.pasdenom.info/article.php?id=30322&group=fr.test#30322>
> <V6Oo4sl1iw7_63ZtYbYjOcsy0xc@jntp>
> Grace au Xref voici l'URL (lien absent car thread.inc.php a échoué) :
> <http://news2web.pasdenom.info/article.php?id=30362&group=fr.test#30322>
> <NX5y9-SJh2MjWb3V49QKiwECVLk@jntp>
> <http://news2web.pasdenom.info/article.php?id=30363&group=fr.test>

Je ne sais pas si c'est ça le problème que tu vois, mais sur cette page
il y a par exemple des liens tels que :
<a href="article.php?id=30362&amp;group=fr.test#30362">­</a>

Vu qu'il s'agit d'articles avec titre vide ou presque, et que c'est sur le
titre que l'on clique pour aller lire l'article, il est normal qu'il soit
difficile de cliquer avec un navigateur en mode graphique.

À mon avis, ne t'inquiète pas pour ça, c'est effectivement un cas ultra
limite qui ne se rencontrera en principe jamais ailleurs que sur fr.test
avec un idiot (comme moi) qui fait des expériences bizarres.

> Un que tu connais :
> <http://news2web.pasdenom.info/article.php?id=30308&group=fr.test#30308>
>
> Le code source est artistique : <rmjtgj$dbf$1...@pasdenom.info>

Rien que de très normal... pour des essais très très limites.

> <rmhoqv$1q5r$8...@cabale.usenet-fr.net>

Idem. J'ai réussi à faire envoyer à mon logiciel un caractère en principe
interdit. Inutile de s'en faire, je dois être le seul sur tout usenet-fr à
m'amuser à ce genre de stupidités.

> Le carré blanc (!) : <OtpJSo-jicO5NVWcqy8hBQ9dbhI@jntp>
> <http://news2web.pasdenom.info/article.php?id=30339&group=fr.test#30341>

Et là encore ça fonctionne parfaitement. Même si tu pars sur l'une des réponses
en cliquant sur le « Re:_ » tu peux revenir à l'article d'origine d'Elephant
Man en cliquant sur le petit « _ ». Il faut bien viser mais ça reste possible.

> Il y avait aussi les posts de Dom Féranpière©® et les réponses avant
> qu'il ne corrige son lecteur de news...

Oui. Là encore on pourrait modifier le code de NewsPortal pour qu'il s'adapte
au bug, mais il n'y a rien d'obligatoire.


--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 19, 2020, 6:33:29 PM10/19/20
to
Le 19/10/2020 16:20, yamo' a écrit :
>
> Il y avait aussi les posts de Dom Féranpière©® et les réponses avant
> qu'il ne corrige son lecteur de news...

Une solution radicale consisterait à éliminer purement et simplement
tout caractère non ASCII dans les entêtes à la réception :

$headers = iconv("US-ASCII", "US-ASCII//IGNORE", $headers);

C'est avec ce genre de solution que certains voyaient son pseudo sous
la forme « Dom Franpire » au lieu que cela fasse tout buguer.


Une solution un peu moins radicale serait :

$headers = iconv("ISO-8859-1", "US-ASCII//TRANSLIT", $headers);

Cela donnerait :
"Dom Feranpiere(C)(R)" si c'était vraiment du Latin1
"Dom FA(C)ranpiA?reA(C)A(R)" si c'était de l'UTF-8


--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 19, 2020, 6:56:39 PM10/19/20
to
Le 20/10/2020 00:33, j'écrivais :
>
> Une solution un peu moins radicale serait :
>
> $headers = iconv("ISO-8859-1", "US-ASCII//TRANSLIT", $headers);
>
> Cela donnerait :
> "Dom Feranpiere(C)(R)" si c'était vraiment du Latin1
> "Dom FA(C)ranpiA?reA(C)A(R)" si c'était de l'UTF-8

J'ai trouvé la solution idéale !

iconv("UTF-8", "US-ASCII//TRANSLIT//IGNORE", "Dom Féranpière©®" en UTF-8)
==> Dom Feranpiere(C)(R)

iconv("UTF-8", "US-ASCII//TRANSLIT//IGNORE", "Dom Féranpière©®" en Latin1)
==> Dom Franpire

Yapluka.

--
Olivier Miakinen

yamo'

unread,
Oct 20, 2020, 4:07:19 AM10/20/20
to
Salut,

Copie et suivi vers fr.comp.usenet.serveurs.

Le contexte : discussion autour de la refonte du code de Newsportal
rendue possible par le portage du code en php7 par Sudarshan S Chawathe.
Le code : <URL:https://gitlab.com/yamo-nntp/newsportal>


Gérald Niel a tapoté le 19/10/2020 19:05:
> Ce n'est pas ce que j'ai suggéré, et ça n'est pas une bonne idée.
> NewsPortal est un client NNTP.

Désolé pour l'incompréhension.

> Il est fort possible qu'à l'époque de l'écriture de NewsPortal les
> fonctions IMAP de PHP n'existaient pas.

J'ai déjà fait ça pour une mailing list en java mais pourra t'on le
faire avant que le post ne soit diffusé?
Est-ce qu'il y a une commande alternative à post?


> https://www.php.net/manual/fr/ref.imap.php

Dans mon souvenir, les modifications sur les entêtes ajoutent des
entêtes received.


> Hors ces fonctions permettent de se connecter à un serveur nntp en
> mode client.
> À explorer…

Probablement mais je ne vois pas trop comment (mais, je n'ai pas encore
regardé).

Il me semble que le plus simple serait d'adapter ce type de code en perl
pour éditer les entêtes en s'assurant qu'on ne traite que les entêtes
venant d'un newsportal bien identifié et pas tout le feed :

<https://www.eyrie.org/~eagle/faqs/inn.html#S6.11>

On doit pouvoir faire quelque chose du genre :
add $hdr (...?)

Il y a aussi la piste des codes d'édition des entêtes d'albasani et aioe :
<https://web.archive.org/web/20200218102944/http://albasani.net/technical/x-trace.html.en>


--
Stéphane

yamo'

unread,
Oct 20, 2020, 4:34:02 AM10/20/20
to
Salut,


Olivier Miakinen a tapoté le 19/10/2020 21:29:
> Le 17/10/2020 22:54, j'écrivais :
>>>
>>>> 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 fait.
>
> Il y a un fichier mime.inc.php à inclure. Ce fichier fait 550 lignes dont
> un bon tiers de commentaires explicatifs au début − sans compter les autres
> commentaires parsemés un peu partout dans le code.


Tant mieux, je déteste le code magique.

>
> Note que je n'utilise aucune fonction de gestion des charsets, ni rien pour
> encoder en QP ou en Base64, tout est fait à la mimine. Les fonctions externes
> que j'utilise sont :
> - pour les chaînes de caractères : strlen(), substr(), sprintf() et ord() ;
> - pour les regexp : preg_match() et preg_split() ;
> - pour les tableaux : count() ;
> et je crois bien que c'est tout.
>
> En outre je ne pollue pas l'espace de noms car je n'ai rien défini d'autre
> que deus classes : HeaderTools et MimeEncodeHeader. Tout est fait dedans.
>
>
> Mais je ne suis pas encore au point pour utiliser Git, alors pour le moment
> j'ai mis le fichier mime.inc.php sur cjoint :


C'est assez simple d'ouvrir un compte sur gitlab (mon compte de github a
été utilisé pour ça).
Et tu peux faire les manipulations en web ou en vraies commandes git. Le
simple fait de vouloir éditer le code de mon dépôt va te proposer de
faire un fork où tu pourras éditer le code dans ton coin.

Pour mes erreurs pour mettre à jour mes dépôts locaux, c'est par ce que
je m'y prends comme un newbie...
Mes dépôts locaux doivent être mal initialisés.
De mémoire, il faudrait que j'utilise des trucs du genre git init bare
et une autre commande que j'ai oublié ...


> <https://www.cjoint.com/c/JJttn5IYkLA>
>
> Attention, je pense qu'ouvrir le fichier directement ne fonctionne pas, en
> tout cas ça n'a pas marché pour moi. Mais le télécharger sur le disque pour
> l'ouvrir ensuite, ça marche bien.

Pas de soucis, ça a fonctionné.

Je vais mettre un peu de temps à lire ton code et les commentaires.

Quel boulot!


--
Stéphane

yamo'

unread,
Oct 20, 2020, 4:35:18 AM10/20/20
to
Salut,


Olivier Miakinen a tapoté le 20/10/2020 00:56:
C'est en plus de ton code?

--
Stéphane

yamo'

unread,
Oct 20, 2020, 6:43:23 AM10/20/20
to
Salut,

Olivier Miakinen a tapoté le 19/10/2020 21:29:
> C'est fait.
>
> Il y a un fichier mime.inc.php à inclure. Ce fichier fait 550 lignes dont
> un bon tiers de commentaires explicatifs au début − sans compter les autres
> commentaires parsemés un peu partout dans le code.


J'ai fait un premier test et je le trouve très concluant!

Je n'ai pas encore publié le code.
<rmme1c$v8c$1...@pasdenom.info>
<news:rmme1c$v8c$1...@pasdenom.info>

--
Stéphane

yamo'

unread,
Oct 20, 2020, 9:37:39 AM10/20/20
to
Eric Demeester a tapoté le 20/10/2020 15:30:
> Bonjour,

Bonjour,


> yamo' (Mon, 19 Oct 2020 08:01:28 -0000 (UTC) - fr.comp.lang.php) :
>
>> Je m'astreins à poster avec newsportal mais, je préfère utiliser la
>> couche mailnews de Seamonkey...
>
> Pas que ce soit très important, mais selon les cas, ton :
>
> Newsportal-HTTP-Posting-Host:
>
> est en IPv6 ou en IPv4.
>
> Message-ID: <rmjh4n$1gs$1...@pasdenom.info>
> User-Agent: NewsPortal/0.50.1c
> Newsportal-HTTP-Posting-Host: 2a01:e35:2e9c:92b0:3188:96c9:3b25:7127
>
> Message-ID: <rmk7au$oin$1...@pasdenom.info>
> User-Agent: NewsPortal/0.50.1c
> Newsportal-HTTP-Posting-Host: 192.168.0.254


Oui, c'est par je suis dans le LAN où est le raspberry donc des fois
ipv4 des fois ipv6... Même phénomène en NNTP pur.
Je ne sais pas comment modifier ça sur la box ou le serveur.



--
Stéphane

Olivier Miakinen

unread,
Oct 20, 2020, 10:09:53 AM10/20/20
to
Le 20/10/2020 10:34, yamo' m'a répondu :
>>
>> Note que je n'utilise aucune fonction de gestion des charsets, ni rien pour
>> encoder en QP ou en Base64, tout est fait à la mimine. Les fonctions externes
>> que j'utilise sont :
>> - pour les chaînes de caractères : strlen(), substr(), sprintf() et ord() ;
>> - pour les regexp : preg_match() et preg_split() ;
>> - pour les tableaux : count() ;
>> et je crois bien que c'est tout.

J'avais oublié au moins une fonction :
- pour les nombres flottants : ceil()

Ça c'est pour le calcul de la taille d'un encodage en base64.

>> Mais je ne suis pas encore au point pour utiliser Git, alors pour le moment
>> j'ai mis le fichier mime.inc.php sur cjoint :
>
> C'est assez simple d'ouvrir un compte sur gitlab (mon compte de github a
> été utilisé pour ça).
> Et tu peux faire les manipulations en web ou en vraies commandes git. Le
> simple fait de vouloir éditer le code de mon dépôt va te proposer de
> faire un fork où tu pourras éditer le code dans ton coin.

Il faudrait vraiment que je m'y mette. J'ai eu un cours à distance il y
a quelques semaines avec un utilisateur de LilyPond, mais je ne prends
jamais le temps de le mettre en pratique.

> Je vais mettre un peu de temps à lire ton code et les commentaires.

J'ai mis pas mal de temps à les écrire !


D'ailleurs j'aurais quelques modifications à y apporter, sans incidence
majeure. Essentiellement ce sont des commentaires que je voudrais
modifier, mais aussi supprimer le code suivant aux alentours de la
ligne 320 ou bien le rendre optionnel :

if ($this->word_count == 0) {
// Avoid an error
$this->words = array("(NULL)");
$this->word_count = 1;
}

Ce que font ces 5 lignes (que j'ai oublié de documenter dans le gros
pavé d'explications au début), c'est éviter d'avoir un contenu vide
puisque c'est interdit dans le champ Subject − mais peut-être que
c'est autorisé pour d'autres champs.

Dans ce cas précis, au lieu d'avoir :
Subject:
on aurait :
Subject: (NULL)

--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 20, 2020, 10:13:10 AM10/20/20
to
Le 20/10/2020 10:35, yamo' m'a répondu :
>>
>> J'ai trouvé la solution idéale !
>>
>> iconv("UTF-8", "US-ASCII//TRANSLIT//IGNORE", "Dom Féranpière©®" en UTF-8)
>> ==> Dom Feranpiere(C)(R)
>>
>> iconv("UTF-8", "US-ASCII//TRANSLIT//IGNORE", "Dom Féranpière©®" en Latin1)
>> ==> Dom Franpire
>>
>> Yapluka.
>>
>
> C'est en plus de ton code?

Non, parce que mon code mime.inc.php ne concerne actuellement que l'encodage
avant envoi d'un nouvel article, alors qu'ici c'est quelque chose à faire
à la réception d'un article venu de l'extérieur, avant de décoder les entêtes.

Mais si tu veux je peux aussi prévoir une partie décodage, avec une nouvelle
classe MimeDecodeHeader en plus de MimeEncodeHeader.


--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 20, 2020, 10:28:21 AM10/20/20
to
Le 20/10/2020 12:43, yamo' a écrit :
>
> J'ai fait un premier test et je le trouve très concluant!

Moi aussi !

> Je n'ai pas encore publié le code.

Note que tu pourras l'utiliser non seulement pour Subject, mais aussi pour
Comments si tu en mets un (qui devrait avantageusement remplacer X-Comment)
et Organization.

*ATTENTION* : contrairement à ce qui est fait dans le code actuellement sur
gitlab, il ne faut surtout pas encoder User-Agent car les caractères '='
et '?' utilisés pour l'encodage MIME (et '/' seulement pour base64) sont
tous les trois interdits dans un 'token' de User-Agent. C'est pour ça que
Forté Agent s'y appelle ForteAgent et que MacCafé s'y appelle MacCafe.


--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 20, 2020, 3:31:11 PM10/20/20
to
Le 20/10/2020 16:09, je répondais à yamo' :
>
>> Je vais mettre un peu de temps à lire ton code et les commentaires.
>
> J'ai mis pas mal de temps à les écrire !

Si jamais tu n'as pas encore commencé à lire le code de la fonction
how_many_encodable(), ou si tu n'y comprends rien parce qu'elle
retourne un tableau lu avec l'instruction list(...), alors il est
temps que je t'envoie ma nouvelle version de mime.inc.php.

En effet, j'ai remplacé cette longue fonction par deux fonctions
plus courtes et plus faciles à comprendre, tout en laissant le
reste du code à peu près intact.


Mais si tu l'as déjà lue et que tu es sur le reste, rien ne presse.

Cordialement,
--
Olivier Miakinen

yamo'

unread,
Oct 21, 2020, 3:48:42 AM10/21/20
to Olivier Miakinen
Salut,

Olivier Miakinen a tapoté le 20/10/2020 16:13:
> Le 20/10/2020 10:35, yamo' m'a répondu :
>>>
>>> J'ai trouvé la solution idéale !
>>>
>>> iconv("UTF-8", "US-ASCII//TRANSLIT//IGNORE", "Dom Féranpière©®" en UTF-8)
>>> ==> Dom Feranpiere(C)(R)
>>>
>>> iconv("UTF-8", "US-ASCII//TRANSLIT//IGNORE", "Dom Féranpière©®" en Latin1)
>>> ==> Dom Franpire
>>>
>>> Yapluka.

Je vais tester pour voir.


>>>
>>
>> C'est en plus de ton code?
>
> Non, parce que mon code mime.inc.php ne concerne actuellement que l'encodage
> avant envoi d'un nouvel article, alors qu'ici c'est quelque chose à faire
> à la réception d'un article venu de l'extérieur, avant de décoder les entêtes.
>
> Mais si tu veux je peux aussi prévoir une partie décodage, avec une nouvelle
> classe MimeDecodeHeader en plus de MimeEncodeHeader.

Si tu veux, et que ça ne te demande pas trop de temps.

Tu me diras quel message de commit de je mets sur git
pour ton fichier php : juste la partie copyright?


--
Stéphane

yamo'

unread,
Oct 21, 2020, 3:48:59 AM10/21/20
to
Salut,

Olivier Miakinen a tapoté le 20/10/2020 16:13:
> Le 20/10/2020 10:35, yamo' m'a répondu :
>>>
>>> J'ai trouvé la solution idéale !
>>>
>>> iconv("UTF-8", "US-ASCII//TRANSLIT//IGNORE", "Dom Féranpière©®" en UTF-8)
>>> ==> Dom Feranpiere(C)(R)
>>>
>>> iconv("UTF-8", "US-ASCII//TRANSLIT//IGNORE", "Dom Féranpière©®" en Latin1)
>>> ==> Dom Franpire
>>>
>>> Yapluka.

Je vais tester pour voir.


>>>
>>
>> C'est en plus de ton code?
>
> Non, parce que mon code mime.inc.php ne concerne actuellement que l'encodage
> avant envoi d'un nouvel article, alors qu'ici c'est quelque chose à faire
> à la réception d'un article venu de l'extérieur, avant de décoder les entêtes.
>
> Mais si tu veux je peux aussi prévoir une partie décodage, avec une nouvelle
> classe MimeDecodeHeader en plus de MimeEncodeHeader.

yamo'

unread,
Oct 21, 2020, 4:06:01 AM10/21/20
to
Salut,


Olivier Miakinen a tapoté le 20/10/2020 21:31:
> Le 20/10/2020 16:09, je répondais à yamo' :
>>
>>> Je vais mettre un peu de temps à lire ton code et les commentaires.
>>
>> J'ai mis pas mal de temps à les écrire !
>
> Si jamais tu n'as pas encore commencé à lire le code de la fonction
> how_many_encodable(), ou si tu n'y comprends rien parce qu'elle
> retourne un tableau lu avec l'instruction list(...), alors il est
> temps que je t'envoie ma nouvelle version de mime.inc.php.

J'avoue que je n'ai pas encore tout lu.
Ton code est bien écrit mais je sens que je n'ai jamais vraiment appris
le php...

>
> En effet, j'ai remplacé cette longue fonction par deux fonctions
> plus courtes et plus faciles à comprendre, tout en laissant le
> reste du code à peu près intact.
>
>
> Mais si tu l'as déjà lue et que tu es sur le reste, rien ne presse.

Je te laisse juge.


>
> Cordialement,


De même, bonne journée,


--
Stéphane

yamo'

unread,
Oct 21, 2020, 4:11:31 AM10/21/20
to
Olivier Miakinen a tapoté le 20/10/2020 16:28:
> Le 20/10/2020 12:43, yamo' a écrit :
>>
>> J'ai fait un premier test et je le trouve très concluant!
>
> Moi aussi !
>
>> Je n'ai pas encore publié le code.
>
> Note que tu pourras l'utiliser non seulement pour Subject, mais aussi pour
> Comments si tu en mets un (qui devrait avantageusement remplacer X-Comment)
> et Organization.

Pour X-Comment c'est pour trouver un moyen de déboguer. Je ne pense pas
avoir besoin de Comment.

>
> *ATTENTION* : contrairement à ce qui est fait dans le code actuellement sur
> gitlab, il ne faut surtout pas encoder User-Agent car les caractères '='
> et '?' utilisés pour l'encodage MIME (et '/' seulement pour base64) sont
> tous les trois interdits dans un 'token' de User-Agent. C'est pour ça que
> Forté Agent s'y appelle ForteAgent et que MacCafé s'y appelle MacCafe.

Entre temps, je l'avais enlevé moi même.

Logiquement ça devrait être valide (passé en citation pour que Seamonkey
ne coupe pas la ligne :
> fputs($ns, "User-Agent: NewsPortal/0.50.1c (https://gitlab.com/yamo-nntp/newsportal)\r\n");





--
Stéphane

Olivier Miakinen

unread,
Oct 21, 2020, 4:57:43 AM10/21/20
to
Salut,

Je vais répondre en même temps à ton article de

Le 21/10/2020 10:05, yamo' a écrit :
> Salut,

Je vais répondre en même temps à ton article de 09:48.

>> Si jamais tu n'as pas encore commencé à lire le code de la fonction
>> how_many_encodable(), ou si tu n'y comprends rien parce qu'elle
>> retourne un tableau lu avec l'instruction list(...), alors il est
>> temps que je t'envoie ma nouvelle version de mime.inc.php.
>
> J'avoue que je n'ai pas encore tout lu.
> Ton code est bien écrit mais je sens que je n'ai jamais vraiment appris
> le php...

Moi je l'avais appris du temps de PHP 3. Du coup, même si j'ai sur mon site
des scripts qui fonctionnent en PHP 4, je n'avais encore jamais utilisé les
classes. Autant dire que j'ai passé beaucoup de temps à lire la doc pour
faire ce mime.inc.php avec classes en PHP 7.

... et je compte mettre à jour sur mon site la fonction d'écriture des
nombres en chiffres.

>> En effet, j'ai remplacé cette longue fonction par deux fonctions
>> plus courtes et plus faciles à comprendre, tout en laissant le
>> reste du code à peu près intact.
>
> Je te laisse juge.

D'après ce que tu me dis, autant prendre la dernière version :
https://www.cjoint.com/c/JJviRo1RznA


Je n'ai pas encore inclus de code pour le décodage, mais tu peux voir dans
mon article « gérer des entêtes foireux » que j'y songe très sérieusement
et que j'ai commencé à expérimenter des trucs.

En ce qui concerne le message de commit, la partie copyright me semble très
bien. D'ailleurs je n'y ai pas fait preuve de beaucoup d'originalité : j'ai
juste copié-collé celle de Florian Amrhein dans post.inc.php avant d'y
changer le nom et l'adresse de courriel.

Par ailleurs j'ai aussi repris sa taille d'indentation, et sa façon de
mettre l'accolade ouvrante sur la première ligne de définition d'une
fonction au lieu de la reporter à la ligne suivante.


Cordialement,
--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 21, 2020, 5:03:16 AM10/21/20
to
Le 21/10/2020 10:11, yamo' a écrit :
>>
>> Note que tu pourras l'utiliser non seulement pour Subject, mais aussi pour
>> Comments si tu en mets un (qui devrait avantageusement remplacer X-Comment)
>> et Organization.
>
> Pour X-Comment c'est pour trouver un moyen de déboguer. Je ne pense pas
> avoir besoin de Comment.

Ok, très bien. D'autant plus que cet entête devrait s'appeler Comments et non
Comment si tu en avais eu besoin. ;-)

>> *ATTENTION* : contrairement à ce qui est fait dans le code actuellement sur
>> gitlab, il ne faut surtout pas encoder User-Agent car les caractères '='
>> et '?' utilisés pour l'encodage MIME (et '/' seulement pour base64) sont
>> tous les trois interdits dans un 'token' de User-Agent. C'est pour ça que
>> Forté Agent s'y appelle ForteAgent et que MacCafé s'y appelle MacCafe.
>
> Entre temps, je l'avais enlevé moi même.

Ok.

> Logiquement ça devrait être valide (passé en citation pour que Seamonkey
> ne coupe pas la ligne) :
>> fputs($ns, "User-Agent: NewsPortal/0.50.1c (https://gitlab.com/yamo-nntp/newsportal)\r\n");

Oui, ça me semble parfait comme ça.


--
Olivier Miakinen

yamo'

unread,
Oct 21, 2020, 5:16:45 AM10/21/20
to

Salut,
Je réponds avec la dernière version de ta librairie.

Olivier Miakinen a écrit :

> Salut,

> Je vais répondre en même temps à ton article de

> Le 21/10/2020 10:05, yamo' a écrit :

À ce propos, pour l'instant il n'y a pas
d'heure dans la première ligne juste :
"Olivier Miakinen a écrit :"

>> Salut,

> Je vais répondre en même temps à ton article de 09:48.

>>> Si jamais tu n'as pas encore commencé à lire le code de la fonction
>>> how_many_encodable(), ou si tu n'y comprends rien parce qu'elle
>>> retourne un tableau lu avec l'instruction list(...), alors il est
>>> temps que je t'envoie ma nouvelle version de mime.inc.php.
>>
>> J'avoue que je n'ai pas encore tout lu.
>> Ton code est bien écrit mais je sens que je n'ai jamais vraiment appris
>> le php...

> Moi je l'avais appris du temps de PHP 3. Du coup, même si j'ai sur mon site
> des scripts qui fonctionnent en PHP 4, je n'avais encore jamais utilisé les
> classes. Autant dire que j'ai passé beaucoup de temps à lire la doc pour
> faire ce mime.inc.php avec classes en PHP 7.

> .... et je compte mettre à jour sur mon site la fonction d'écriture des
> nombres en chiffres.

Oui le code Objet une fois adopté devient une habitude logique.


>>> En effet, j'ai remplacé cette longue fonction par deux fonctions
>>> plus courtes et plus faciles à comprendre, tout en laissant le
>>> reste du code à peu près intact.
>>
>> Je te laisse juge.

> D'après ce que tu me dis, autant prendre la dernière version :
> https://www.cjoint.com/c/JJviRo1RznA

Adopté! Je fais le commit juste après.


> Je n'ai pas encore inclus de code pour le décodage, mais tu peux voir dans
> mon article « gérer des entêtes foireux » que j'y songe très sérieusement
> et que j'ai commencé à expérimenter des trucs.

Ok, pour l'instant je ne touche à rien à cette partie.


> En ce qui concerne le message de commit, la partie copyright me semble très
> bien. D'ailleurs je n'y ai pas fait preuve de beaucoup d'originalité : j'ai
> juste copié-collé celle de Florian Amrhein dans post.inc.php avant d'y
> changer le nom et l'adresse de courriel.

Entendu!

> Par ailleurs j'ai aussi repris sa taille d'indentation, et sa façon de
> mettre l'accolade ouvrante sur la première ligne de définition d'une
> fonction au lieu de la reporter à la ligne suivante.

Oui, c'est un code lisible mais je ne comprends pas pourquoi il fait :

$var2 = "un texte : " . $var1;

et pas :

$var2 = "un texte : $var1";

Peut-être que la première façon est plus logique en php.




Olivier Miakinen

unread,
Oct 21, 2020, 6:43:51 AM10/21/20
to
Salut,

Le 21/10/2020 11:16, yamo' a écrit :
>
> Salut,
> Je réponds avec la dernière version de ta librairie.

<aparté d'un emmerdeur de puriste du français>
... de ma bibliothèque (mais j'ai probablement utilisé le mot librairie
pendant au moins la moitié de ma vie de développeur).
</aparté>

> À ce propos, pour l'instant il n'y a pas
> d'heure dans la première ligne juste :
> "Olivier Miakinen a écrit :"

Ça doit pouvoir se faire sans trop de difficultés, à condition de trouver
la bonne fonction pour interpréter le champ Date, entre strtotime(),
strptime() et date_parse_from_format(). Ensuite réécrire la date selon
le format voulu par l'utilisateur ne devrait pas poser de problème.

> [...] c'est un code lisible mais je ne comprends pas pourquoi il fait :
>
> $var2 = "un texte : " . $var1;
>
> et pas :
>
> $var2 = "un texte : $var1";

Je crois que c'est un très vieux mythe dans la communauté PHP (je l'avais
déjà vu à l'époque de PHP 3 ou 4) selon lequel la concaténation avec « . »
serait plus rapide que l'interprétation à l'intérieur des guillemets
doubles.

Voir à ce propos le tout premier commentaire utilisateur sur la page
<https://www.php.net/manual/fr/language.types.string.php> qui met à bas
cette légende.


Cordialement,
--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 21, 2020, 7:12:19 AM10/21/20
to
Le 21/10/2020 12:43, je répondais à yamo' :
>
>> je ne comprends pas pourquoi il fait :
>> $var2 = "un texte : " . $var1;
>> et pas :
>> $var2 = "un texte : $var1";
>
> [mythe de rapidité]

Parfois cela peut être aussi une question de lisibilité.

Par exemple, même si je trouve plus lisible d'écrire :
"Bonjour {$prenom} {$nom} !"
que :
"Bonjour " . $prenom . " " . $nom . " !" ,
dans mime.inc.php j'ai préféré écrire :
$buffer = " " . $buffer;
pour qu'il soit clair qu'il s'agit d'ajouter une espace devant $buffer.

--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 21, 2020, 7:24:10 AM10/21/20
to
Le 21/10/2020 11:16, yamo' a écrit :
>
>> D'après ce que tu me dis, autant prendre la dernière version :
>> https://www.cjoint.com/c/JJviRo1RznA
>
> Adopté! Je fais le commit juste après.

La prochaine fois j'ajouterai aussi trois lignes de commentaire. En fait
ce que j'ai appelé « MimeEncodeHeader working principle » deviendra
« MimeEncodeHeader *detailed* working principle », et j'ajouterai juste
un « general working principle » que je te livre dès maintenant pour
faciliter ta lecture du code :

§§§

On each line of the header field, we put things in ASCII for as long as
we can, then when we have to switch to MIME encoding we keep it until
the end of the line.

§§§


--
Olivier Miakinen

yamo'

unread,
Oct 21, 2020, 8:04:03 AM10/21/20
to
Olivier Miakinen a tapoté le 21/10/2020 13:12:
Merci, sauf peut-être une fois j'ai respecté le deuxième style d'écriture.

C'est fou le nombre d'informations qu'il y a dans la page citée que j'ai
lu très rapidement jusqu'au premier commentaire!

Je note pour bibliothèque mais je doute que je vais retenir :P

--
Stéphane

Olivier Miakinen

unread,
Oct 21, 2020, 10:38:03 AM10/21/20
to
Le 21/10/2020 11:16, yamo' a écrit :
>
> Adopté! Je fais le commit juste après.

https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php

lignes 120-121 :
$header_encode = new MimeEncodeHeader();
fputs($ns, $header_encode->__construct("X-Subject",$subject)."\r\n");

Ça marche ça ??? J'aurais plutôt dit :

$header_encode = new MimeEncodeHeader("X-Subject",$subject);
fputs($ns, "{$header_encode}\r\n");


--
Olivier Miakinen

yamo'

unread,
Oct 21, 2020, 11:44:20 AM10/21/20
to
Olivier Miakinen a tapoté le 21/10/2020 16:38:
Merci de me relire!
C'était mes premiers tests que j'avais oublié d'enlever.
Et effectivement, ça ne fonctionne pas...

C'est une question sûrement basique mais, je n'ai pas trouvé
quelle est la différence entre la syntaxe {$header_encode} et la syntaxe
$header_encode?
Quand je cherche je tombe sur les variables dynamiques...

L'entête utile est à la ligne 80, j'ai commenté la ligne 79 qui ne me
semble plus utile.
Au fait gitlab ne fonctionne pas bien sur Seamonkey (pour ce site,
j'utilise chromium). Le bug est connu.


--
Stéphane

Olivier Miakinen

unread,
Oct 21, 2020, 2:33:21 PM10/21/20
to
Le 21/10/2020 17:44, yamo' a écrit :
>
> C'est une question sûrement basique mais, je n'ai pas trouvé
> quelle est la différence entre la syntaxe {$header_encode} et la syntaxe
> $header_encode?

Plus précisément entre "..{$header_encode}.." et "..$header_encode.." puisque
nous parlions de variables à l'intérieur d'une chaîne entre guillements doubles.
Eh bien tout est expliqué sur la page super longue que tu n'as fait que survoler
jusqu'au premier commentaire. ;-)

En bref, dans tous les cas simples il n'y a strictement aucune différence entre
les deux.

Utiliser "...${var}..." ou "...{$var}..." de préférence à "...$var..." permet
déjà d'éviter les problèmes quand il y a des lettres ou des chiffres après le
nom de la variable.

Par exemple :
$fruit = "orange";
"j'ai mangé des $fruits" ne fonctionne pas
"j'ai mangé des ${fruit}s" fonctionne
"j'ai mangé des {$fruit}s" fonctionne

Quant à la syntaxe avec {$ au lieu de ${ elle peut être super puissante.
Je te renvoie vers la doc pour ça.

Rappel :
https://www.php.net/manual/fr/language.types.string.php


> L'entête utile est à la ligne 80, j'ai commenté la ligne 79 qui ne me
> semble plus utile.

Oui, c'est OK.

> Au fait gitlab ne fonctionne pas bien sur Seamonkey (pour ce site,
> j'utilise chromium). Le bug est connu.

Ah zut. Et Firefox non plus ?


--
Olivier Miakinen

yamo'

unread,
Oct 23, 2020, 5:25:18 AM10/23/20
to
Salut,

Olivier Miakinen a tapoté le 21/10/2020 20:33:

>> Au fait gitlab ne fonctionne pas bien sur Seamonkey (pour ce site,
>> j'utilise chromium). Le bug est connu.
>
> Ah zut. Et Firefox non plus ?

Si c'est par ce que Seamonkey est très stable et que les développeurs
n'ont pas encore réussi à intégrer la réécriture de Firefox et de
Thunderbird sans tout casser...


--
Stéphane

Olivier Miakinen

unread,
Oct 25, 2020, 10:38:14 AM10/25/20
to
Bonjour,

Le 25/10/2020 12:18, Eric Demeester a écrit :
>
>> Par exemple, même si je trouve plus lisible d'écrire :
>> "Bonjour {$prenom} {$nom} !"
>> que :
>> "Bonjour " . $prenom . " " . $nom . " !" ,
>
> Je n'ai pas tout suivi, mais dans l'exemple ci-dessus, je ne comprends
> pas trop ce que viennent faire les accolades {}, qui ne devraient il me
> semble être utilisées qu'en cas de déclaration préalable de variables
> variables (ou variables déclarées dynamiquement) :

Je suis désolé, mais j'ai l'impression que tu confonds la présence d'accolades
avec la présence de deux signes $.

> https://www.php.net/manual/fr/language.variables.variable.php

Sur cette page il y a des exemples aussi bien avec accolades ${$a} que
sans accolades $$a. La présence des accolades n'est nécessaire que pour
éviter les ambiguïtés, comme distinguer ${$a[1]} de ${$a}[1].

> Si $prenom et $nom sont des variables déjà déclarées et renseignées
> comme semble l'indiquer ta seconde syntaxe, il suffit je pense
> d'écrire :
>
> echo "Bonjour $prenom $nom !";

Dans ce cas, oui. Mais là encore les accolades permettent d'éviter les
ambiguïtés, comme dans l'exemple suivant :

$fruit = "orange";
"J'ai mangé des $fruits" // ne fonctionne pas
"J'ai mangé des ${fruit]s" // fonctionne
"J'ai mangé des {$fruit]s" // fonctionne

Et sur <https://www.php.net/manual/fr/language.types.string.php> tu peux voir
des exemples encore plus complexes qui fonctionnent.

En voici quelques-uns tirés de la doc :
§
echo "This square is {$square->width}00 centimeters broad.";
echo "This works: {$arr['key']}";
echo "This works: {$arr[4][3]}";
echo "This works: {$arr['foo'][3]}";
echo "This works too: {$obj->values[3]->name}";
echo "This is the value of the var named $name: {${$name}}";
echo "This is the value of the var named by the return value of getName():
{${getName()}}";
echo "This is the value of the var named by the return value of
\$object->getName(): {${$object->getName()}}";
§

Alors oui, dans ton exemple simple il suffit d'écrire :
echo "Bonjour $prenom $nom !";

Mais ajouter des accolades ne change rien dans ce cas simple, sauf qu'en
prendre l'habitude permet de ne pas être embêté par les cas plus complexes.
Du coup je préfère écrire :
echo "Bonjour {$prenom} {$nom} !";

>
> qui est équivalent à :
>
> echo "Bonjour " . $prenom . " " . $nom . " !";
>
> et à :
>
> echo 'Bonjour ' . $prenom . ' ' . $nom . ' !';
>
> syntaxe qui au passage a ma préférence.

Préférence que je respecte. Mais accepte que j'en aie une autre.

> Je n'utilise la syntaxe « à doubles quotes » (") que quand j'ai
> explicitement besoin d'injecter des variables dans une chaîne et que ça
> me simplifie la vie, typiquement pour construire une requête SQL ou un
> morceau de javascript à la volée avant qu'il ne soient interprétés.
>
> Après, c'est affaire de goût, l'essentiel étant d'être cohérent avec
> soi-même et de savoir s'adapter aux règles communes si on partage le
> développement avec d'autres.

[OUI]

--
Olivier Miakinen

Olivier Miakinen

unread,
Oct 25, 2020, 10:39:55 AM10/25/20
to
[Supersedes <rn42kk$27ph$1...@cabale.usenet-fr.net>]

Bonjour,

Le 25/10/2020 12:18, Eric Demeester a écrit :
>
>> Par exemple, même si je trouve plus lisible d'écrire :
>> "Bonjour {$prenom} {$nom} !"
>> que :
>> "Bonjour " . $prenom . " " . $nom . " !" ,
>

yamo'

unread,
Dec 17, 2020, 9:57:19 AM12/17/20
to
yamo' a tapoté le 21/10/2020 17:44:
> Au fait gitlab ne fonctionne pas bien sur Seamonkey (pour ce site,
> j'utilise chromium). Le bug est connu.

Je déterre un vieux fil.
La référence pour github :
<https://bugzilla.mozilla.org/show_bug.cgi?id=1505460>

--
Stéphane

yamo'

unread,
Jan 12, 2021, 3:41:43 AM1/12/21
to
Salut,

[couic de l'ancien post trouvable sur
<http://news2web.pasdenom.info/thread.php?group=fr.comp.lang.php> ]

Je viens de trouver un bug :
<http://news2web.pasdenom.info/article.php?id=1126&group=fr.usenet.documents#1126>

<https://dogmamix.com/MimeHeadersDecoder/#> arrive à décoder :

Subject: [Mini-FAQ] La m=?ISO-8859-1?Q?=E9decine?= est une science

--
Stéphane

Olivier Miakinen

unread,
Jan 12, 2021, 6:19:26 AM1/12/21
to
Le 12/01/2021 09:41, yamo' a écrit :
>
> Je viens de trouver un bug :
>
> Subject: [Mini-FAQ] La m=?ISO-8859-1?Q?=E9decine?= est une science

Même problème qu'il y a une semaine : l'« encoded-word » est censé être un
« word », c'est-à-dire séparé des autres « word » par un blanc (espace
ou tabulation, éventuellement précédée d'un saut de ligne).

Oui : =?ISO-8859-1?Q?=mE9decine?=

Non : m=?ISO-8859-1?Q?=E9decine?=


--
Olivier Miakinen

Olivier Miakinen

unread,
Jan 14, 2021, 4:01:27 AM1/14/21
to
Le 12/01/2021 à 12:19, j'écrivais :
>
> Oui : =?ISO-8859-1?Q?=mE9decine?=
> Non : m=?ISO-8859-1?Q?=E9decine?=

C'était une erreur dans un entête écrit à la main et non pas généré par
un logiciel. L'erreur est corrigée pour la prochaine publication de la
Mini-FAQ.

yamo'

unread,
Jan 14, 2021, 4:20:49 AM1/14/21
to
Salut,

Olivier Miakinen a tapoté le 14/01/2021 10:01:
Merci, NewsPortal devient un détecteur d'erreurs :P

--
Stéphane
0 new messages