PHP: funzioni urlencode e urldecode

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

PHP: funzioni urlencode e urldecode

Messaggio da samiel »

La mia intenzione era inserire in uno script PHP dei nomi di file
contenenti degli apostrofi. Ora, se lascio semplicemente l'apostrofo
(idem se per assurdo faccio l'escape) il file non viene trovato.

Codice: Seleziona tutto

"Chi siamo"=>array("Chi siamo","Raimondo Franchetti","Gli inizi","L'intitolazione","L'inaugurazione","L'autonomia","La guerra","Il territorio","Le risposte","L'utenza","L'organigramma"),
Ho scoperto le funzioni urlencode e urldecode, che mi pareva
facessero al caso mio. Perciò ho messo:

Codice: Seleziona tutto

isset($_GET["pagina"]) ? urldecode($pagina=$_GET["pagina"]) : $pagina="Home";
$rightmenu="Chi siamo"=>array("Chi siamo","Raimondo Franchetti","Gli inizi","L'intitolazione","L'inaugurazione","L'autonomia","La guerra","Il territorio","Le risposte","L'utenza","L'organigramma"),
e quindi il link l'ho reso così:

Codice: Seleziona tutto

'<a href="index.php?pagina='.urlencode($voce).'">'
Adesso nel browser non ricevo più lamentele sull'inesistenza della pagina,
ma vedo tutto bianco... Purtroppo, almeno per le mie possibilità,
le pagine del manuale PHP su queste due funzioni si sono dimostrate
tutt'altro che illuminanti. Dov'è l'inghippo?

Grazie
M.

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: PHP: funzioni urlencode e urldecode

Messaggio da aschenaz »

Perché usare apostrofi nei nomi di file?
E' buona norma non usare né apostrofi, né caratteri accentati o speciali, né spazi.
Nel tuo caso, puoi modificare l'array nel seguente modo e utilizzare il foreach($nomearray as $chiave=>$valore):
$rightmenu="Chi siamo"=>array("chi-siamo"=>"Chi siamo","raimondo-franchetti"=>"Raimondo Franchetti",etc...),
Mi rendo conto di non aver risposto alla tua domanda, ma, ripeto, è meglio evitare nomi di file siffatti. :)

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: PHP: funzioni urlencode e urldecode

Messaggio da samiel »

In verità, non intendevo usare apostrofi in sé e per sé.
Era per avere un menu che non riportasse pedissequamente
il nome del file, ma potesse essere più ampio ed esplicativo.
Ad es., "guerra" deve diventare "La guerra e il dopoguerra".
Però c'è un problema di riconoscimento per i file il cui nome
ha l'apostrofo. A parte il fatto che, in effetti, hai perfettamente
ragione a proposito del nome dei file.
Ho provato, sempre per tentativi ed errori, ma...
Non c'è feeling! Ho fatto (fra l'altro) così:

Codice: Seleziona tutto

foreach($activemenu as $voce3 => $title) {
echo "
<li>";
if($pagina!=$voce3) echo '<a href="?pagina='.$voce3.'">';
echo $title;
if($pagina!=$voce3) echo "</a>";
echo "</li>";
ma naturalmente (c'era da dubitarne?) non apre la pagina:

Codice: Seleziona tutto

Warning: include(Chi siamo/Chi siamo.php) [function.include]: failed to open stream: No such file or directory in /home/samiel/public_html/franchetti/index.php on line 94

Warning: include() [function.include]: Failed opening 'Chi siamo/Chi siamo.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/samiel/public_html/franchetti/index.php on line 94
perché mi par di capire - non cerca il file e poi gli attribuisce il nome lungo,
ma cerca direttamente il file con nome lungo...

M.

Avatar utente
alessiodf
Linux 3.x
Linux 3.x
Messaggi: 823
Iscritto il: ven 14 ott 2005, 21:04
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1
Località: Roma
Contatta:

Re: PHP: funzioni urlencode e urldecode

Messaggio da alessiodf »

Prova questo! :p

index.php

Codice: Seleziona tutto

<?
$page = "";

if(isset($_GET['page']))
{
        $page = $_GET['page'];
}

if($page != "")
        include "$page";
else
        echo "Default Page";


?>

<a href="?page=<?=rawurlencode("test'o strano.php")?>">Click here</a>

test'o strano.php

Codice: Seleziona tutto

<?
echo "omg!!!";
?>
http://it.php.net/manual/en/function.rawurlencode.php ;)

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: PHP: funzioni urlencode e urldecode

Messaggio da samiel »

Ora o al massimo domani lo provo.
Partendo da urlencode avevo trovato queste funzioni
di PHP per l'HTML. Però ha ragione Aschenaz a proposito
dei nomi di file. Io li metto tutti sempre in minuscolo,
senza spazi, accenti e caratteri speciali. IN questo caso,
il mio era un tentivo (un po' maldestro) per avere
dei titoli adeguati nei menu. Per cui: senz'altro
mi vedo il tuo suggerimento (dopo aver caricato
la lavapiatti...), però se riuscissi anche a realizzare
l'indicazione di Aschenaz in concreto sarebbe
per altro verso meglio...

M.

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: PHP: funzioni urlencode e urldecode

Messaggio da aschenaz »

Questa linea:

Codice: Seleziona tutto

if($pagina!=$voce3) echo '<a href="?pagina='.$voce3.'">';
dovrebbe essere così:

Codice: Seleziona tutto

if($pagina!=$voce3) echo '<a href="index.php?pagina='.$voce3.'">';
anche se in teoria dovrebbe funzionare lo stesso... :-k

Ma l'errore principale credo stia nel fatto che probabilmente hai invertito l'ordine nell'array (titolo=>pagina invece di pagina=>titolo). Posta l'array...

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: PHP: funzioni urlencode e urldecode

Messaggio da samiel »

Non ho sistemato tutto, comunque:

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$rightmenu=array("La biblioteca"=>array("biblioteca"=>"La biblioteca","regolamento"),
"circolari"=>array("circolari","area_pubblica","area_riservata"),
"chisiamo"=>array("chisiamo"=>"Chi siamo","franchetti"=>"Chi &#232; Raimondo Franchetti","inizi"=>"Gli inizi","intitolazione"=>"L'intitolazione","inaugurazione"=>"L'inaugurazione","autonomia"=>"L'autonomia","guerra"=>"Guerra e dopoguerra","territorio"=>"Il territorio","risposte"=>"Le risposte del Franchetti","utenza"=>"L'utenza","organigramma"=>"L'organigramma a. s. 2007-2008"),
"contatti"=>array("contatti","dirigenza","collaboratori_dirigente"=>"Collaboratori
del Dirigente","funzioni_strumentali"=>"Funzioni
strumentali","coordinatori_dipartimenti"=>"Coordinatori dei Dipartimenti","Responsabili laboratori"=>"Responsabili dei laboratori","coordinatori_-consigli"=>"Coordinatori dei Consigli di Classe","calendario_consigli"=>"Calendario Consigli di Classe","calendario_ricevimento"=>"Calendario ricevimento genitori","orario_ricevimento"=>"Orario di ricevimento","email"=>"Email"),
"POF"=>array("Commissione POF","Testo del POF","Carta dei servizi","Regolamento di Istituto","Statuto degli studenti","Regolamento applicativo","Regolamento gite"),
"Progetti"=>array("Referenti di progetto","ECDL","Scambio Australia","Galleria Australia","Scambio USA","Galleria USA","Musica"),
"Segreteria"=>array("Segreteria","Richiesta certificati","Richiesta informazioni","contattaci")
);
$activemenu=0;
$folder="home";
foreach($rightmenu as $kmenu=>$vmenu) {
if(in_array($pagina,$vmenu) | $pagina==$kmenu) {
$activemenu=$rightmenu[$kmenu];
$folder=$kmenu;
}
}
$vocimenu=array("home","chisiamo","contatti","news","pof","progetti","Agenda","segreteria");
foreach($vocimenu as $voce) {
echo "
<li>";
if($pagina!=$voce) echo '<a href="index.php?pagina='.$voce.'">';
echo $voce;
if($pagina!=$voce) echo "</a>";
echo "</li>";
}
echo "\n";
              ?>
            </ul>
          </div>
        </div>
      </div>
      <div id="leftmenu">
        <ul>
          <?php
$vocimenu2=array("home","scuolanet","Newsletter","circolari","biblioteca","studenti","siti");
foreach($vocimenu2 as $voce2) {
echo "
<li>";
if($pagina!=$voce2) echo '<a href="index.php?pagina='.$voce2.'">';
echo $voce2;
if($pagina!=$voce2) echo "</a>";
echo "</li>";
}
echo "\n";
          ?>
        </ul>
      </div>
      <div id="rightmenu">
        <?php
if($activemenu) {
echo "
<ul>";
foreach($activemenu as $voce3 => $label) {
echo "
<li>";
if($pagina!=$voce3) echo '<a href="index.php?pagina='.$voce3.'">';
echo $label;
if($pagina!=$voce3) echo "</a>";
echo "</li>";
}
echo "
</ul>\n";
} else echo "&nbsp;";
        ?>
      </div>
      <?php include("$folder/$pagina.php")
      ?>
Se vado, ad es., in Contatti - Orario di ricevimento, mi spunta.

Codice: Seleziona tutto

Warning: include(home/orario_ricevimento.php) [function.include]: failed to open stream: No such file or directory in /home/samiel/public_html/franchetti/index.php on line 96

Warning: include() [function.include]: Failed opening 'home/orario_ricevimento.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/samiel/public_html/franchetti/index.php on line 96
Eppure la voce nel menu è corretta ("Orario di ricevimento")
e il file cercato è corretto (Orario_ricevimento).
Ora ho fretta (appuntamento dal dentista...), dopo ricontrollo,
ma così non riesco a capire cosa non quaglia...

M.

Avatar utente
alessiodf
Linux 3.x
Linux 3.x
Messaggi: 823
Iscritto il: ven 14 ott 2005, 21:04
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1
Località: Roma
Contatta:

Re: PHP: funzioni urlencode e urldecode

Messaggio da alessiodf »

warning: include(home/orario_ricevimento.php) [function.include]: failed to open stream: No such file or directory in /home/samiel/public_html/franchetti/index.php on line 96
da quel che vedo, $folder = "home"; e tu includi $foldel/$page quindi lui cerca i file da includere in ./home/nome_della_pag.php

ma tu non hai nessuna dir home in ./ come dice qui: /home/samiel/public_html/franchetti/index.php

quindi, non capisco quel $folder = "home" :-k

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: PHP: funzioni urlencode e urldecode

Messaggio da aschenaz »

Nel momento in cui usi un array chiave=>valore, la ricerca col nome della pagina non la devi più fare sul valore ma sulla chiave (array_key_exists...).
Inoltre, l'array deve essere strutturato tutto nello stesso modo.
Fai così (però controlla i nomi delle pagine):

Codice: Seleziona tutto

$rightmenu=array(
	"biblioteca"=>array(
		"biblioteca"=>"La biblioteca",
		"regolamento"=>"Il Regolamento"),
	"circolari"=>array(
		"circolari"=>"Le Circolari",
		"area_pubblica"=>"Area Pubblica",
		"area_riservata"=>"Area Riservata"),
	"chisiamo"=>array(
		"chisiamo"=>"Chi siamo",
		"franchetti"=>"Chi &#232; Raimondo Franchetti",
		"inizi"=>"Gli inizi",
		"intitolazione"=>"L'intitolazione",
		"inaugurazione"=>"L'inaugurazione",
		"autonomia"=>"L'autonomia",
		"guerra"=>"Guerra e dopoguerra",
		"territorio"=>"Il territorio",
		"risposte"=>"Le risposte del Franchetti",
		"utenza"=>"L'utenza",
		"organigramma"=>"L'organigramma a. s. 2007-2008"),
	"contatti"=>array(
		"contatti"=>"Contatti",
		"dirigenza"=>"Dirigenza",
		"collaboratori_dirigente"=>"Collaboratori del Dirigente",
		"funzioni_strumentali"=>"Funzioni strumentali",
		"coordinatori_dipartimenti"=>"Coordinatori dei Dipartimenti",
		"Responsabili laboratori"=>"Responsabili dei laboratori",
		"coordinatori_-consigli"=>"Coordinatori dei Consigli di Classe",
		"calendario_consigli"=>"Calendario Consigli di Classe",
		"calendario_ricevimento"=>"Calendario ricevimento genitori",
		"orario_ricevimento"=>"Orario di ricevimento",
		"email"=>"Email"),
	"pof"=>array(
		"commissione-pof"=>"Commissione POF",
		"testo-pof"=>"Testo del POF",
		"carta-servizi"=>"Carta dei servizi",
		"regolamento-istituto"=>"Regolamento di Istituto",
		"statuto-studenti"=>"Statuto degli studenti",
		"regolamento-applicativo"=>"Regolamento applicativo",
		"regolamento-gite"=>"Regolamento gite"),
	"progetti"=>array(
		"referenti-progetto"=>"Referenti di progetto",
		"ecdl"=>"ECDL",
		"scambio-australia"=>"Scambio Australia",
		"galleria australia"=>"Galleria Australia",
		"scambio-usa"=>"Scambio USA",
		"galleria-usa"=>"Galleria USA",
		"musica"=>"Musica"),
	"segreteria"=>array(
		"segreteria"=>"Segreteria",
		"richiesta-certificati"=>"Richiesta certificati",
		"richiesta-informazioni"=>"Richiesta informazioni",
		"contattaci"=>"contattaci")
);
$activemenu=0;
$folder="home";
foreach($rightmenu as $kmenu=>$vmenu) {
	if(array_key_exists($pagina,$vmenu) | $pagina==$kmenu) {
		$activemenu=$rightmenu[$kmenu];
		$folder=$kmenu;
	}
}
A presto...

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: PHP: funzioni urlencode e urldecode

Messaggio da samiel »

Infatti mò funziona... Aschenaz, mi presti qualche giorno
il tuo lobo cerebrale che sovrintende al PHP? :-)
comunque vedi che questo how-to, tempo permettendo,
devi proprio scriverlo? Sto imparando molto di più
dai tuoi post che da alcuni tomi ponderosi che ho
preso. Certo, la teoria servirà, ma non ho trovato
da nessuna parte una trattazione a prova di niubbo
sull'organizzazione complessiva della pagina,
sulla composizione dei menu ecc ecc. Tutte cose
che mi stai spiegando benissimo e in forma concreta.

Mille grazie
M.

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: PHP: funzioni urlencode e urldecode

Messaggio da aschenaz »

mi presti qualche giorno
il tuo lobo cerebrale che sovrintende al PHP
Ci faresti ben poco! :lol:
Ormai il mio cervello è bello che andato! :lol:
A parte gli scherzi, la cosa fondamentale è IMHO sapere cosa si vuole ottenere.
Poi è un po' come la matematica: basta trovare la formula/funzione giusta.

Rispondi