Encodage caractères #INFO_nnn - bug ?

Bonsoir,

La boucle suivante contenue dans une boucle article:

<BOUCLE_syndic_alerte
(SYNDIC_ARTICLES)
{id_syndic==(144)}
{par date}
{inverse}
{titre == #INFO_TITRE{rubrique,
#ENV{id_rubrique}}}
{0,4}>
#DATE
#URL
#DESCRIPTIF
</BOUCLE_syndic_alerte>

produit la requête SQL suivante :

SELECT syndic_articles.date, syndic_articles.url,
syndic_articles.descriptif FROM `modif`.spip_syndic_articles AS
`syndic_articles` INNER JOIN `modif`.spip_syndic AS L1 ON (
L1.id_syndic = syndic_articles.id_syndic ) WHERE (L1.statut = 'publie')
AND (syndic_articles.statut = 'publie') AND (syndic_articles.id_syndic
REGEXP '(144)') AND (syndic_articles.titre REGEXP 'Côtes
d&#8217;Armor') ORDER BY syndic_articles.date DESC LIMIT 0,4

Il s'agit de croiser le titre d'une rubrique avec le titre d'un article
issu de syndication.

Si le titre de la rubrique est contenu dans le titre de l'article
syndiqué : l'afficher.

Ici avec Côtes d'Armor, la balise #INFO_TITRE{rubrique,
#ENV{id_rubrique}} produit le masque : REGEXP 'Côtes d&#8217;Armor' .

Cela ne retourne rien.

Le titre de l'article syndiqué contient la chaîne "Côtes d'Armor".

Le titre de la rubrique est la chaîne "Côte d'Armor"

Le REGEXP mysql est mal encodé, "Côtes d&#8217;Armor".

S'agit-il d'un bug ?

Cordialement,

Eric

https://dev.mysql.com/doc/refman/5.7/en/regexp.html

SELECT 'Côtes d\'Armor' REGEXP 'Côtes d\'Armor';
SELECT "Côtes d'Armor" REGEXP 'Côtes d\'Armor';

Le mardi 04 février 2020 à 21:57 +0100, eric a écrit :

https://dev.mysql.com/doc/refman/5.7/en/regexp.html
_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

info generee : C\xc3\xb4tes d&#8217;Armor\n

https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/filtres.php
#L4378

Il manque juste l'échappement pour l'apostrophe de 'Côtes d'Armor'.

C'est l'encodage de la page debug de spip qui donnait REGEXP 'Côtes
d&#8217;Armor').

Code :
SELECT syndic_articles.date, syndic_articles.url,
syndic_articles.descriptif
FROM spip_syndic_articles AS `syndic_articles`
INNER JOIN spip_syndic AS L1 ON ( L1.id_syndic =
syndic_articles.id_syndic )
WHERE (L1.statut = 'publie')
  AND (syndic_articles.statut = 'publie')
  AND (syndic_articles.id_syndic REGEXP '(144)')
  AND (syndic_articles.titre REGEXP 'Côtes d’Armor')
ORDER BY syndic_articles.date DESC
LIMIT 0,4

Code corrigé (prise en compte des apostrophes pour la requete SQL

SELECT syndic_articles.date, syndic_articles.url,
syndic_articles.descriptif
FROM spip_syndic_articles AS
`syndic_articles`
INNER JOIN spip_syndic AS L1 ON ( L1.id_syndic =
syndic_articles.id_syndic )
WHERE (L1.statut = 'publie')
  AND
(syndic_articles.statut = 'publie')
  AND
(syndic_articles.id_syndic REGEXP '(144)')
  AND
(syndic_articles.titre REGEXP 'Côtes d\’Armor')
ORDER BY
syndic_articles.date DESC
LIMIT 0,4

Il faut donc échapper les apostrophes avant d'envoyer la requête.

Bonsoir,

Pas de bug, les titres du flux syndiqué n'utilisent pas l'apostrophe
(&#39; - &apos; - U+0027) dans les titres mais ‘ (LEFT SINGLE QUOTATION
MARK - &#8216; - &lsquo; - U+2018 ).

Eric

Boucle fonctionnelle (placée dans une boucle article :

<BOUCLE_syndic_alerte
(SYNDIC_ARTICLES)
{id_syndic==(144)}
{par date}
{inverse}
{titre == (#INFO_TITRE*{rubrique,
#ID_RUBRIQUE}|replace{\x27,'’',S})}
{0,4}>
#TITRE
</BOUCLE_syndic_alerte>

N'y a t-il pas plus élégant que '’' dans replace{\x27,'’',S} ?

Merci,

Eric

Le mercredi 05 février 2020 à 03:28 +0100, eric a écrit :

Bonsoir,

Pas de bug, les titres du flux syndiqué n'utilisent pas l'apostrophe
(&#39; - &apos; - U+0027) dans les titres mais ‘ (LEFT SINGLE
QUOTATION
MARK - &#8216; - &lsquo; - U+2018 ).

Eric
_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Quelle version de SPIP utilises-tu ? Il y peut-être juste un soucis d’encodage lors de la requête. Vérifie ton fichier config/connect.php
https://code.spip.net/autodoc/tree/ecrire/base/connect_sql.php.html#function_spip_connect_db
Comme tu peux voir le dernier argument permet de choisir un charset.

Kenavo d’ar wech all :wink: