Repository 32bit  Forum
Repository 64bit  Wiki

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.

PHP: funzioni urlencode e urldecode

Messaggioda samiel » gio feb 28, 2008 2:43

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.
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: PHP: funzioni urlencode e urldecode

Messaggioda aschenaz » gio feb 28, 2008 7:22

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. :)
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4420
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.16
Desktop: KDE 4.10.5

Re: PHP: funzioni urlencode e urldecode

Messaggioda samiel » gio feb 28, 2008 22:13

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.
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: PHP: funzioni urlencode e urldecode

Messaggioda alessiodf » gio feb 28, 2008 23:08

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 ;)
Avatar utente
alessiodf
Linux 2.6
Linux 2.6
 
Messaggi: 823
Iscritto il: ven ott 14, 2005 20:04
Località: Roma
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1

Re: PHP: funzioni urlencode e urldecode

Messaggioda samiel » gio feb 28, 2008 23:14

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.
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: PHP: funzioni urlencode e urldecode

Messaggioda aschenaz » ven feb 29, 2008 7:23

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...
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4420
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.16
Desktop: KDE 4.10.5

Re: PHP: funzioni urlencode e urldecode

Messaggioda samiel » ven feb 29, 2008 14:25

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.
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: PHP: funzioni urlencode e urldecode

Messaggioda alessiodf » ven feb 29, 2008 14:43

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
alessiodf
Linux 2.6
Linux 2.6
 
Messaggi: 823
Iscritto il: ven ott 14, 2005 20:04
Località: Roma
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1

Re: PHP: funzioni urlencode e urldecode

Messaggioda aschenaz » ven feb 29, 2008 16:26

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...
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4420
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.16
Desktop: KDE 4.10.5

Re: PHP: funzioni urlencode e urldecode

Messaggioda samiel » ven feb 29, 2008 20:44

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.
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: PHP: funzioni urlencode e urldecode

Messaggioda aschenaz » ven feb 29, 2008 21:23

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.
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4420
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.16
Desktop: KDE 4.10.5


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

cron