Si vous cherchez cualquier moyen de littéralement pour que PHP arrête de remplacer les caractères '.' dans les tableaux $_GET ou $_POST, il faut modifier les sources de PHP (et dans ce cas, c'est relativement simple).
AVERTISSEMENT : La modification des sources de PHP C est une option avancée !
Voir aussi ceci Rapport de bug PHP qui suggère la même modification.
Pour explorer, vous devrez :
- télécharger Le code source C de PHP
- désactiver le
.
contrôle de remplacement
-
./configure , faire et déployer votre version personnalisée de PHP
Le changement de source lui-même est trivial et implique la mise à jour de seulement la moitié d'une ligne en main/php_variables.c
:
....
/* ensure that we don't have spaces or dots in the variable name (not binary safe) */
for (p = var; *p; p++) {
if (*p == ' ' /*|| *p == '.'*/) {
*p='_';
....
Note : par rapport à l'original || *p == '.'
a été commenté
Exemple de sortie :
avec une QUERY_STRING de a.a[]=bb&a.a[]=BB&c%20c=dd
, course à pied <?php print_r($_GET);
produit maintenant :
Array
(
\[a.a\] => Array
(
\[0\] => bb
\[1\] => BB
)
\[c\_c\] => dd
)
Notes :
_* ce correctif répond uniquement à la question initiale (il arrête le remplacement des points, pas des espaces).
- s'exécutant sur ce patch sera plus rapide que les solutions de niveau script, mais ces réponses purement-.php sont encore généralement préférables (car elles évitent de modifier PHP lui-même)._* _en théorie, une approche polyfill est possible ici et pourrait combiner les approches -- tester le changement de niveau C en utilisant
parse_str()
et (si elles ne sont pas disponibles) se rabattre sur des méthodes plus lentes._