Discussion:
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)
(trop ancien pour répondre)
Olivier Miakinen
2020-10-17 20:54:18 UTC
Permalink
[copie et suivi vers fr.comp.lang.php]

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.
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'
2020-10-18 08:52:21 UTC
Permalink
Salut,
Post by Olivier Miakinen
[copie et suivi vers fr.comp.lang.php]
[.........]
Post by Olivier Miakinen
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
2020-10-18 12:42:08 UTC
Permalink
Post by Olivier Miakinen
[...]
Post by Olivier Miakinen
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.
Post by Olivier Miakinen
Grâce à toi, j'ai nettoyé le code et je suis arrivé à quelque chose
<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...
§
Post by Olivier Miakinen
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'
2020-10-18 17:35:00 UTC
Permalink
Post by Olivier Miakinen
Post by Olivier Miakinen
[...]
Post by Olivier Miakinen
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é.
Post by Olivier Miakinen
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.
Post by Olivier Miakinen
Grâce à toi, j'ai nettoyé le code et je suis arrivé à quelque chose
<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...
§
Post by Olivier Miakinen
fputs($ns,'Subject: ' . mb_encode_mimeheader(
$subject,mb_internal_encoding(), "Q", " rn"). "rn");
Post by Olivier Miakinen
§
L'idéal serait quand même que tout soit en UTF-8 le plus tôt possible, et
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...
Post by Olivier Miakinen
mb_encode_mimeheader($subject, "UTF-8", "Q", "rn");
J'ai essayé un peu toutes les options sauf celle là.
J'essayerais demain.
Post by Olivier Miakinen
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
2020-10-19 07:32:31 UTC
Permalink
Post by Olivier Miakinen
Post by Olivier Miakinen
Est-ce que tu as essayé de mettre un « √ » dans le titre ? Tiens, j'en
ajoute
Post by Olivier Miakinen
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'
2020-10-19 08:04:47 UTC
Permalink
Post by Olivier Miakinen
Post by Olivier Miakinen
Post by Olivier Miakinen
Est-ce que tu as essayé de mettre un « √ » dans le titre ? Tiens, j'en
ajoute
Post by Olivier Miakinen
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.
Merci d'avance :)
yamo'
2020-10-19 10:56:00 UTC
Permalink
Post by yamo'
Post by Olivier Miakinen
Post by Olivier Miakinen
Post by Olivier Miakinen
Est-ce que tu as essayé de mettre un « √ » dans le titre ? Tiens, j'en
ajoute
Post by Olivier Miakinen
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.
Merci d'avance :)
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
yamo'
2020-10-19 15:44:32 UTC
Permalink
Post by yamo'
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
2020-10-19 17:05:24 UTC
Permalink
Le Lundi 19 octobre 2020 à 15:44 UTC, yamo' écrivait sur
Post by yamo'
Post by yamo'
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é.
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 -+-
yamo'
2020-10-20 08:07:16 UTC
Permalink
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>
Post by Gérald Niel
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.
Post by Gérald Niel
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?
Post by Gérald Niel
https://www.php.net/manual/fr/ref.imap.php
Dans mon souvenir, les modifications sur les entêtes ajoutent des
entêtes received.
Post by Gérald Niel
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'
2020-10-19 08:01:28 UTC
Permalink
Salut,

Je m'astreins à poster avec newsportal mais, je préfère utiliser la
couche mailnews de Seamonkey...
Post by Olivier Miakinen
Post by Olivier Miakinen
[...]
Post by Olivier Miakinen
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>
Post by Olivier Miakinen
Post by Olivier Miakinen
Grâce à toi, j'ai nettoyé le code et je suis arrivé à quelque chose
<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...
§
Post by Olivier Miakinen
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.
Post by Olivier Miakinen
L'idéal serait quand même que tout soit en UTF-8 le plus tôt possible, et
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...
Post by Olivier Miakinen
mb_encode_mimeheader($subject, "UTF-8", "Q", "rn");
Pas encore adopté. Je me demande si c'est utile par rapport au code
existant.
Post by Olivier Miakinen
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
Olivier Miakinen
2020-10-19 11:04:08 UTC
Permalink
Bonjour,

Je rappelle ici le lien :
<URL:https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php>
Post by yamo'
Post by Olivier Miakinen
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.
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.
Post by yamo'
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.
Post by yamo'
Post by Olivier Miakinen
L'idéal serait quand même que tout soit en UTF-8 le plus tôt possible, et
mb_internal_encoding("UTF-8");
C'est fait.
Ok.
Post by yamo'
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.
Post by yamo'
Post by Olivier Miakinen
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.
Post by yamo'
Post by Olivier Miakinen
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'
2020-10-19 14:20:14 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
<URL:https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php>
Post by yamo'
Post by Olivier Miakinen
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.
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.
Post by Olivier Miakinen
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.
Post by Olivier Miakinen
Post by yamo'
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.
Post by Olivier Miakinen
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é.
Post by Olivier Miakinen
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.
Post by yamo'
Post by Olivier Miakinen
L'idéal serait quand même que tout soit en UTF-8 le plus tôt possible, et
mb_internal_encoding("UTF-8");
C'est fait.
Ok.
Post by yamo'
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.
Post by Olivier Miakinen
Post by yamo'
Post by Olivier Miakinen
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!
Post by Olivier Miakinen
Post by yamo'
Post by Olivier Miakinen
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$***@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>
<***@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-***@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$***@pasdenom.info>

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

Le carré blanc (!) : <OtpJSo-***@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
Olivier Miakinen
2020-10-19 20:19:04 UTC
Permalink
Post by yamo'
http://news2web.pasdenom.info/article.php?id=5256&group=fr.comp.usenet.lecteurs-de-news#5256
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.
Post by yamo'
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>
<http://news2web.pasdenom.info/article.php?id=30362&group=fr.test#30322>
<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.
Post by yamo'
<http://news2web.pasdenom.info/article.php?id=30308&group=fr.test#30308>
Rien que de très normal... pour des essais très très limites.
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.
Post by yamo'
<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.
Post by yamo'
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
2020-10-19 22:33:27 UTC
Permalink
Post by yamo'
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
2020-10-19 22:56:37 UTC
Permalink
Post by Olivier Miakinen
$headers = iconv("ISO-8859-1", "US-ASCII//TRANSLIT", $headers);
"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'
2020-10-20 08:35:17 UTC
Permalink
Salut,
Post by Olivier Miakinen
Post by Olivier Miakinen
$headers = iconv("ISO-8859-1", "US-ASCII//TRANSLIT", $headers);
"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.
C'est en plus de ton code?
--
Stéphane
Olivier Miakinen
2020-10-20 14:13:09 UTC
Permalink
Post by yamo'
Post by Olivier Miakinen
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
yamo'
2020-10-21 07:48:39 UTC
Permalink
Salut,
Post by Olivier Miakinen
Post by yamo'
Post by Olivier Miakinen
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.
Post by Olivier Miakinen
Post by yamo'
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'
2020-10-21 07:48:57 UTC
Permalink
Salut,
Post by Olivier Miakinen
Post by yamo'
Post by Olivier Miakinen
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.
Post by Olivier Miakinen
Post by yamo'
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
Eric Demeester
2020-10-20 13:30:00 UTC
Permalink
Bonjour,
Post by yamo'
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$***@pasdenom.info>
User-Agent: NewsPortal/0.50.1c
Newsportal-HTTP-Posting-Host: 2a01:e35:2e9c:92b0:3188:96c9:3b25:7127

Message-ID: <rmk7au$oin$***@pasdenom.info>
User-Agent: NewsPortal/0.50.1c
Newsportal-HTTP-Posting-Host: 192.168.0.254
yamo'
2020-10-20 13:37:37 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Bonjour,
Post by Olivier Miakinen
Post by yamo'
Je m'astreins à poster avec newsportal mais, je préfère utiliser la
couche mailnews de Seamonkey...
est en IPv6 ou en IPv4.
User-Agent: NewsPortal/0.50.1c
Newsportal-HTTP-Posting-Host: 2a01:e35:2e9c:92b0:3188:96c9:3b25:7127
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
2020-10-19 19:29:58 UTC
Permalink
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
yamo'
2020-10-20 08:34:00 UTC
Permalink
Salut,
Post by yamo'
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.
Post by yamo'
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
- 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
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é ...
Post by yamo'
<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
Olivier Miakinen
2020-10-20 14:09:52 UTC
Permalink
Post by yamo'
Post by Olivier Miakinen
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
- 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.
Post by yamo'
Post by Olivier Miakinen
Mais je ne suis pas encore au point pour utiliser Git, alors pour le moment
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.
Post by yamo'
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
2020-10-20 19:31:10 UTC
Permalink
Post by Olivier Miakinen
Post by 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'
2020-10-21 08:05:58 UTC
Permalink
Salut,
Post by Olivier Miakinen
Post by Olivier Miakinen
Post by 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...
Post by Olivier Miakinen
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.
Post by Olivier Miakinen
Cordialement,
De même, bonne journée,
--
Stéphane
Olivier Miakinen
2020-10-21 08:57:41 UTC
Permalink
Salut,

Je vais répondre en même temps à ton article de
Post by yamo'
Salut,
Je vais répondre en même temps à ton article de 09:48.
Post by yamo'
Post by Olivier Miakinen
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.
Post by yamo'
Post by Olivier Miakinen
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
yamo'
2020-10-21 09:16:44 UTC
Permalink
Salut,
Je réponds avec la dernière version de ta librairie.
Post by yamo'
Salut,
Je vais répondre en même temps à ton article de
À ce propos, pour l'instant il n'y a pas
d'heure dans la première ligne juste :
"Olivier Miakinen a écrit :"
Post by yamo'
Post by yamo'
Salut,
Je vais répondre en même temps à ton article de 09:48.
Post by yamo'
Post by Olivier Miakinen
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.
Post by yamo'
Post by yamo'
Post by Olivier Miakinen
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.
https://www.cjoint.com/c/JJviRo1RznA
Adopté! Je fais le commit juste après.
Post by yamo'
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.
Post by yamo'
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!
Post by yamo'
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
2020-10-21 10:43:49 UTC
Permalink
Salut,
Post by yamo'
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é>
Post by yamo'
À ce propos, pour l'instant il n'y a pas
"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.
Post by yamo'
$var2 = "un texte : " . $var1;
$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
2020-10-21 11:12:17 UTC
Permalink
Post by yamo'
$var2 = "un texte : " . $var1;
$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
yamo'
2020-10-21 12:04:02 UTC
Permalink
Post by Olivier Miakinen
Post by yamo'
$var2 = "un texte : " . $var1;
$var2 = "un texte : $var1";
[mythe de rapidité]
Parfois cela peut être aussi une question de lisibilité.
"Bonjour {$prenom} {$nom} !"
"Bonjour " . $prenom . " " . $nom . " !" ,
$buffer = " " . $buffer;
pour qu'il soit clair qu'il s'agit d'ajouter une espace devant $buffer.
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
Eric Demeester
2020-10-25 11:18:52 UTC
Permalink
Bonjour,
Post by Olivier Miakinen
"Bonjour {$prenom} {$nom} !"
"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) :

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

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 !";

qui est équivalent à :

echo "Bonjour " . $prenom . " " . $nom . " !";

et à :

echo 'Bonjour ' . $prenom . ' ' . $nom . ' !';

syntaxe qui au passage a ma préférence.

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.
Olivier Miakinen
2020-10-25 14:38:12 UTC
Permalink
Bonjour,
Post by Eric Demeester
Post by Olivier Miakinen
"Bonjour {$prenom} {$nom} !"
"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
Je suis désolé, mais j'ai l'impression que tu confonds la présence d'accolades
avec la présence de deux signes $.
Post by Eric Demeester
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].
Post by Eric Demeester
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
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} !";
Post by Eric Demeester
echo "Bonjour " . $prenom . " " . $nom . " !";
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.
Post by Eric Demeester
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
2020-10-25 14:39:54 UTC
Permalink
[Supersedes <rn42kk$27ph$***@cabale.usenet-fr.net>]

Bonjour,
Post by Eric Demeester
Post by Olivier Miakinen
"Bonjour {$prenom} {$nom} !"
"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
Je suis désolé, mais j'ai l'impression que tu confonds la présence d'accolades
avec la présence de deux signes $.
Post by Eric Demeester
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].
Post by Eric Demeester
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
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} !";
Post by Eric Demeester
echo "Bonjour " . $prenom . " " . $nom . " !";
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.
Post by Eric Demeester
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
Eric Demeester
2020-10-28 18:18:41 UTC
Permalink
Bonsoir,
Post by Olivier Miakinen
Je suis désolé, mais j'ai l'impression que tu confonds la présence d'accolades
avec la présence de deux signes $.
Tu as raison :)
Olivier Miakinen
2020-10-21 11:24:09 UTC
Permalink
Post by yamo'
Post by Olivier Miakinen
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
Olivier Miakinen
2020-10-21 14:38:02 UTC
Permalink
Post by yamo'
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'
2020-10-21 15:44:18 UTC
Permalink
Post by yamo'
Post by yamo'
Adopté! Je fais le commit juste après.
https://gitlab.com/yamo-nntp/newsportal/-/blob/master/lib/post.inc.php
$header_encode = new MimeEncodeHeader();
fputs($ns, $header_encode->__construct("X-Subject",$subject)."\r\n");
$header_encode = new MimeEncodeHeader("X-Subject",$subject);
fputs($ns, "{$header_encode}\r\n");
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
2020-10-21 18:33:19 UTC
Permalink
Post by yamo'
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
Post by yamo'
L'entête utile est à la ligne 80, j'ai commenté la ligne 79 qui ne me
semble plus utile.
Oui, c'est OK.
Post by yamo'
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'
2020-10-23 09:25:16 UTC
Permalink
Salut,
Post by Olivier Miakinen
Post by yamo'
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
yamo'
2020-12-17 14:57:18 UTC
Permalink
Post by yamo'
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
Eric Demeester
2020-10-25 11:25:32 UTC
Permalink
Bonjour,
Post by yamo'
Oui le code Objet une fois adopté devient une habitude logique.
Je confirme. Je l'utilise de plus en plus, même si je continue à avoir
des difficultés avec les mécanismes qu'il y a derrière (les héritages,
etc.).

À l'instar de Monsieur Jourdain avec la prose, je pense avoir commencé à
écrire du code objet sans le savoir, mais quand on est comme moi
autodidacte en informatique, on ne fait pas forcément les choses dans le
même ordre et de la même façon que ceux qui sachent :)
yamo'
2020-10-20 10:43:21 UTC
Permalink
Salut,
Post by yamo'
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$***@pasdenom.info>
<news:rmme1c$v8c$***@pasdenom.info>
--
Stéphane
Olivier Miakinen
2020-10-20 14:28:20 UTC
Permalink
Post by yamo'
J'ai fait un premier test et je le trouve très concluant!
Moi aussi !
Post by yamo'
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
yamo'
2020-10-21 08:11:29 UTC
Permalink
Post by Olivier Miakinen
Post by yamo'
J'ai fait un premier test et je le trouve très concluant!
Moi aussi !
Post by yamo'
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.
Post by Olivier Miakinen
*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
Post by Olivier Miakinen
fputs($ns, "User-Agent: NewsPortal/0.50.1c (https://gitlab.com/yamo-nntp/newsportal)\r\n");
--
Stéphane
Olivier Miakinen
2020-10-21 09:03:09 UTC
Permalink
Post by yamo'
Post by Olivier Miakinen
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. ;-)
Post by yamo'
Post by Olivier Miakinen
*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.
Post by yamo'
Logiquement ça devrait être valide (passé en citation pour que Seamonkey
Post by Olivier Miakinen
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'
2021-01-12 08:41:41 UTC
Permalink
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
Eric Demeester
2021-01-12 09:18:54 UTC
Permalink
Bonjour,
Post by yamo'
Subject: [Mini-FAQ] La m=?ISO-8859-1?Q?=E9decine?= est une science
On dirait du QP non annoncé, et donc non décodé, mais Olivier saura :)
Olivier Miakinen
2021-01-12 11:19:25 UTC
Permalink
Post by yamo'
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
2021-01-14 09:01:25 UTC
Permalink
Post by Olivier Miakinen
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'
2021-01-14 09:20:47 UTC
Permalink
Salut,
Post by Olivier Miakinen
Post by Olivier Miakinen
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.
Merci, NewsPortal devient un détecteur d'erreurs :P
--
Stéphane
Continuer la lecture sur narkive:
Loading...