Pagina 1 di 1

PHP: funzioni urlencode e urldecode

Inviato: gio 28 feb 2008, 2:43
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.

Re: PHP: funzioni urlencode e urldecode

Inviato: gio 28 feb 2008, 7:22
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. :)

Re: PHP: funzioni urlencode e urldecode

Inviato: gio 28 feb 2008, 22:13
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.

Re: PHP: funzioni urlencode e urldecode

Inviato: gio 28 feb 2008, 23:08
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 ;)

Re: PHP: funzioni urlencode e urldecode

Inviato: gio 28 feb 2008, 23:14
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.

Re: PHP: funzioni urlencode e urldecode

Inviato: ven 29 feb 2008, 7:23
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...

Re: PHP: funzioni urlencode e urldecode

Inviato: ven 29 feb 2008, 14:25
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.

Re: PHP: funzioni urlencode e urldecode

Inviato: ven 29 feb 2008, 14:43
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

Re: PHP: funzioni urlencode e urldecode

Inviato: ven 29 feb 2008, 16:26
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...

Re: PHP: funzioni urlencode e urldecode

Inviato: ven 29 feb 2008, 20:44
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.

Re: PHP: funzioni urlencode e urldecode

Inviato: ven 29 feb 2008, 21:23
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.