Newsgroup: it.comp.www.php
Titolo: Codifica URL

Salve a tutti, se in PHP ho una variabile contenente un url, esempio:
$myurl = 
"
http://www.extensionsmirror.nl/index.php?showtopic=1441&pid=5962&st=0&#entry5962
";
Quale e` il modo migliore per codificare i caratteri "unsafe" per poter 
poi inserire l'url in un href di un link???
Grazie.

 poter poi inserire l'url in un href di un link???  
Il manuale, questo sconosciuto ...
http://www.php.net/urlencode
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 
http://www.php.net/urlencode
Ciao Setec, non voglio risponderti male (so che posti molto su icwp e in 
  passato mi hai anche aiutato ;) ...).
Io il manuale PHP lo leggo sempre! :P
Pero`, dato un url come quello che ho postato, suppongo che *non* vada 
bene una cosa del tipo:
$enc_myurl = urlencode ($myurl);
e tanto meno roba del tipo:
$enc_myurl = urlencode (htmlspecialchars ($myurl));
Allora cosa uso??? C'e` da precisare (non l'ho fatto finora) che a me 
arriva un url *completo*, che non conosco a priori.
Supponiamo che io riceva un url da un file di testo, o da un database o 
da un file xml (questo e` proprio il mio caso). Non so se e` un url 
assoluto o relativo, se contiene parametri o se ha un anchor alla fine!

 bene una cosa del tipo:
Perche' supponi che non vada bene?
-- 
I am what I am, I do what I can


 Perche' supponi che non vada bene?
Beh, se fai un urlencode() di un url del tipo "
http://www.php.net
" ti 
viene fuori: "http%3A%2F%
2Fwww.php.net
". Prova a mettere questo 
nell'attributo href di un tag <a> (o anche direttamente nella barra 
degli indirizzi di un browser) e ... non funziona. Anzi se e` in un tag 
<a>, il browser lo vede pure come link relativo!

 tag <a>, il browser lo vede pure come link relativo!
Sei davvero sicuro di sapere a che cosa serva urlencode?
Inoltre, secondo te, quali sarebbero i caratteri "unsafe" nell'url che
hai postato?


 hai postato?
Beh, forse non mi sono spiegato bene, chiedo scusa ...
Ti arriva da qualche parte una variabile che contiene un url:
$url = "http://www.prova.com/~cerca.php?cerca=novità in libreria&tipo=3";
Devi metterlo nell'attributo href di un tag <a> (usando una semplice 
echo). Cosa fai (faresti)?

 echo). Cosa fai (faresti)?
Tralasciando che puoi fare semplicemente echo e poi ci pensa il browser
a fare encoding necessario, comunque:
<?php 
$url = "http://www.prova.com/~cerca.php?cerca=novità in
libreria&tipo=3";
$parsed = parse_url($url);
$parsed['scheme']   = isset($parsed['scheme'])   ? $parsed['scheme']
: '';
$parsed['host']     = isset($parsed['host'])     ? $parsed['host']
: '';
$parsed['path']     = isset($parsed['path'])     ? $parsed['path']
: '';
$parsed['query']    = isset($parsed['query'])    ? $parsed['query']
: '';
$parsed['fragment'] = isset($parsed['fragment']) ? $parsed['fragment']
: '';
$url = $parsed['scheme'] . '://' . $parsed['host'] . $parsed['path'];
if ($parsed['query'] !== '') {
	$url .= '?';
	$join = '';
	parse_str($parsed['query'], $params);
	foreach ($params as $key => $param) {
		$url .= $join . $key . '=' . urlencode($param);
		$join = '&amp;';
	}
}
if ($parsed['fragment'] !== '') {
	$url .= '#' . $parsed['fragment'];
}
print($url);
?>
Manca la gestione degli array.
