[spip-dev] htmlspecialchars() et PHP 5.4

Comme on l’a déjà dit, htmlspecialchars() et compagnie sont désormais (à partir de PHP 5.4) associés à un charset utf-8 par défaut. Ce qui fait planter les sites spip qui tourneraient encore en iso-8859-1.

Un fix qui nous avait paru possible était de remplacer
htmlspecialchars($texte);
par
htmlspecialchars($texte, null, ‘ISO-8859-1’);

Mais je viens de voir que ça pouvait créer un autre problème, cette fonction n’échappant plus les guillemets doubles ( " ).

Donc il va sérieusement falloir s’équiper d’un jeu de tests et d’une fonction spip_htmlspecialchars() [et compagnie…] qui prennent en charge tous les cas de figure.

– Fil

Ah ben la good news : c’est typiquement le genre de situation où on peut utiliser le plugin TestBuilder pour générer des jeux de tests à partir de la fonction existante (suffit de le faire tourner sur un PHP 5.3 pour faire une photo du comportement existant, et de s’en servir ensuite comme référence fonctionnelle pour la fonction de compatibilité PHP 5.4+).

Je m’occupe de générer les tests.

Cédric

En gros le mélange ‘é"’ est mortel : soit le é casse, soit le " est pas échappé. A tester dans plusieurs charsets.

et la doc de php est complètement à l'ouest sur ce coup là :
   http://www.php.net/manual/en/function.htmlspecialchars.php

1- '"' becomes '"' when ENT_NOQUOTES is not set.
     "'" becomes ''' (or ') only when ENT_QUOTES is set.

2- ENT_QUOTES Will convert both double and single quotes.
     ENT_NOQUOTES Will leave both double and single quotes unconverted.

décidemment...

Y a plus qu’à :
http://zone.spip.org/trac/spip-zone/changeset/78874

je vous laisse tester/debug le(s) candidat(s) wrapper en 5.4 et 5.5 (je remets là celui du message de commit, à moitié mangé)

/**
* htmlspecialchars wrapper (PHP >= 5.4 compat issue)

Personne pour regarder ça donc ?
Dommage que personne n’ait de client bloqué par ce bug ^^

Cédric,
trolleur du mardi

Si si on m'a dit que les clients de _fil...

Oui et de fait, je viens de me manger le bug encore une fois, sans comprendre que c’était de nouveau le même…

Le test passe bien chez moi, si je mets la fonction dans inc/filtres_mini.php

Bon super,

du coup j’ai envoyé comme ça sur la branche dev :
http://core.spip.org/projects/spip/repository/revisions/21038
http://zone.spip.org/trac/spip-zone/changeset/79297
http://zone.spip.org/trac/spip-zone/changeset/79299
http://zone.spip.org/trac/spip-zone/changeset/79300

A vérifier en situation, je préparerais les tests sur les autres fonctions problématiques.

Cédric

Quelqu’un à vérifié que le test spip_htmlentities était OK sous PHP 5.4+ ?
http://zone.spip.org/trac/spip-zone/changeset/79329/core/tests

Que l’on puisse valider
http://core.spip.org/projects/spip/repository/revisions/21065

et reporter tout ça en branche stable et faire une release qui rétablit la compatibilité 5.4+ ?
(il y a des attentes, PHP 5.4 est la version par défaut en debian stable cf http://blog.spip.net/SPIP-3-0-13-SPIP-2-1-24-PHP-5-5.html#forum4761)

Cédric

Bonjour

Je veux bien faire le test, quel changement faut il faire ?

Hop,

Nickel, c'est intégré dans la branche stable :

http://core.spip.org/projects/spip/repository/revisions/21111
http://core.spip.org/projects/spip/repository/revisions/21112
http://core.spip.org/projects/spip/repository/revisions/21113
http://core.spip.org/projects/spip/repository/revisions/21114

http://zone.spip.org/trac/spip-zone/changeset/79964/core/branches/spip-3.0/plugins
http://zone.spip.org/trac/spip-zone/changeset/79965/core/branches/spip-3.0/plugins
http://zone.spip.org/trac/spip-zone/changeset/79966/core/branches/spip-3.0/plugins
http://zone.spip.org/trac/spip-zone/changeset/79967/core/branches/spip-3.0/plugins

Il reste à verifier que tout est OK, y compris une installation, car il peut manquer des inclusions, et ce sera bon pour release.

Cédric

Je viens de faire un test de création de site en mutu 3.1-dev / base
sqlite => nickel / RAS