carattere . nella querystring

Domanda da un miGLIone di Neuri: :P

dato un URL come questo:

http://www.miodominio.it/index.php?param.a=ciao&param.b=mondo

se nel file index.php scrivo

<?php
print_r( $_GET );
?>

sapete dirmi perché mai l'output che ottengo è questo?

<?php
Array (
    [param_a] => ciao
    [param_b] => mondo
)
?>

 ???

inviato 9 anni fa
Xscratch
X 0 X

Probabilmente il . non è ammissibile in un indice per cui viene automaticamente sostituito da un _

risposto 9 anni fa
LonelyWolf
X 0 X

Non credo, infatti prima di postare ho fatto una prova creando manualmente un array i cui indici contenessero il . e non ho avuto problemi

risposto 9 anni fa
Xscratch
X 0 X

La cosa mi ha incuriosito per cui ho fatto una ricerca. Ed ecco il risultato...

http://it.php.net/manual/it/language.variables.external.php

Poiché il  caro vecchio register global userebbe la stringa param.a come nome della variabile associata, allora la presenza del punto risulta evidentemente scomoda (i nomi delle variabili non possono contenere punti)

Per cui, indipendentemente dalla presenza del register global, il php converte tutti i punti presenti nelle chiavi provenienti dall'esterno in underscore.

Non si finisce mai di imparare.... (e di odiare il register global!)

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Mi sono documentato anch'io, e ho scoperto che c'è comunque una maniera che permette di recuperare la variabili prima di questa manomissione, anzi...2:

- tramite l'array globale $HTTP_RAW_POST_DATA, che però è disponibile solo se l'enctype del form è enctype="multipart/form-data" (e ovviamente method="post") e richiede una particolare configurazione di PHP

- tramite lo stream php://input, quì i dati sono già nel formato di una querystring, è disponibile SOLO con enctype="multipart/form-data" ed è indipendente dalla configurazione di PHP

detto questo...come al solito sono fortunato e i dati che mi servivano vengono inviati al form tramite richiesta GET quindi tutto il discorso appena fatto è inutile e mi sono dovuto arrangiare :-\

mi accodo all'odio verso il register_globals e tutte le altre opzioni che sono comode per i newbie ma hanno creato solo una gran confusione.

Ah, se qualcuno si stesse chiedendo perché mai uno dovrebbe mettere il . nel nome di un campo consiglio di dare un'occhiata al funzionamento del controllo HTML <input type="image" />

 :bye:

risposto 9 anni fa
Xscratch
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda