urldecode() problem

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

urldecode() problem

Δημοσίευση από _Invisible_ » 02 Αύγ 2007 01:31

Κώδικας: Επιλογή όλων

// url: http://localhost/index.php?download&file=Hacking+%26+Internet+Security.ppt

$fname = ( isset($_GET['file']) && !empty($_GET['file']) ) ? trim($_GET['file']) : '';
$fname = str_replace('%26', '&', $fname);

echo urldecode($fname);
exit;
Γεια σας. Στον παραπάνω κώδικα βλέπουμε ότι από το $fname παίρνουμε ένα url (το url ας υποθέσουμε ότι είναι αυτό που είναι σαν σχόλιο στο script. Το url αυτό έχει κωδικοποιηθεί με urlencode(). Το πρόβλημα είναι πως όταν βάζω echo urldecode($fname); παίρνω "Hacking" αντί για "Hacking & Internet Security".

Την ζημιά την κάνει το & που γίνεται %26. Γι' αυτό έβαλα και το str_replace(), αλλά πάλι "Hacking" παίρνω... :-?

Καμιά ιδέα;

Ευχαριστώ.

Άβαταρ μέλους
dik_
Δημοσιεύσεις: 476
Εγγραφή: 07 Ιουν 2007 11:28

urldecode() problem

Δημοσίευση από dik_ » 02 Αύγ 2007 03:44

Εικόνα

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

urldecode() problem

Δημοσίευση από _Invisible_ » 02 Αύγ 2007 03:54

Πώς και έτσι; Φαντάζομαι δεν έκανες και τίποτα στον κώδικα, έγραψες ένα απλό $_GET['file']...

Δεν ξέρω γιατί γίνεται αυτό... Τέσπα, να ο κώδικάς μου:

Κώδικας: Επιλογή όλων

<?php

if &#40;!defined&#40;'ALLOW_ACCESS'&#41;&#41;
&#123;
	exit;
&#125;

if &#40;!$is_authed&#41;
&#123;
	redirect&#40;'index.'.$phpEx&#41;;
	exit;
&#125;

$fname = &#40; isset&#40;$_GET&#91;'file'&#93;&#41; && !empty&#40;$_GET&#91;'file'&#93;&#41; &#41; ? trim&#40;$_GET&#91;'file'&#93;&#41; &#58; '';

if &#40; empty&#40;$fname&#41; &#41;
&#123;
	redirect&#40;'index.'.$phpEx&#41;;
	exit;
&#125;
else
&#123;
	$fname = urldecode&#40;$fname&#41;;
	$full_path = 'uploads/' . $fname;

  	if &#40; file_exists&#40;$full_path&#41; && is_file&#40;$full_path&#41; &#41;
	&#123;
		$file		= 	array&#40;&#41;;
		$file&#91;'path'&#93;	=	'uploads/' . $fname;
		$file&#91;'name'&#93;	=	basename&#40;$file&#91;'path'&#93;&#41;;
		$file&#91;'ext'&#93;	=	substr&#40;strrchr&#40;$file&#91;'name'&#93;, '.'&#41;, 1&#41;;
		$file&#91;'size'&#93;	=	filesize&#40;$file&#91;'path'&#93;&#41;;

		$sql = "SELECT file_size, file_reciever
			FROM " . FILES_TABLE . "
			WHERE file_basename = '" . escape&#40;&#40;string&#41; $file&#91;'name'&#93;&#41; . "'
		        LIMIT 1;";

		if &#40;! &#40;$result = $db->sql_query&#40;$sql&#41;&#41; &#41;
		&#123;
			html_page&#40;$lang&#91;'Error'&#93;, 'DB Error&#58; &#91;Resource ID #1&#93; Could not query Files Table.'&#41;;
		&#125;

		$rows = $db->sql_numrows&#40;$result&#41;;

		if &#40; $rows == 0 &#41;
		&#123;
			html_page&#40;$lang&#91;'Error'&#93;, $lang&#91;'No_such_file'&#93;&#41;;
		&#125;
		else
		&#123;
			$row = $db->sql_fetchrow&#40;$result&#41;;

			if &#40; userdata&#40;'user_level'&#41; == ADMIN &#41;
			&#123;
				header&#40;"Content-type&#58; application/force-download"&#41;;
				header&#40;"Content-Transfer-Encoding&#58; Binary"&#41;;
				header&#40;"Content-length&#58; ".$file&#91;'size'&#93;&#41;;
				header&#40;"Content-disposition&#58; attachment; filename=\"".$file&#91;'name'&#93;."\""&#41;;
				readfile&#40;$file&#91;'path'&#93;&#41;;

				$del = "DELETE
					FROM " . FILES_TABLE . "
					WHERE file_basename = '" . escape&#40;&#40;string&#41; $file&#91;'name'&#93;&#41; . "'
					LIMIT 1;";

				if &#40; ! &#40;$delete_result = $db->sql_query&#40;$del&#41;&#41; &#41;
				&#123;
					html_page&#40;$lang&#91;'Error'&#93;, 'DB Error&#58; &#91;Resource ID #2&#93; Could not delete file from Files Table.'&#41;;
				&#125;

				unlink&#40;$file&#91;'path'&#93;&#41;;
				exit;

			&#125;

			if &#40; $row&#91;'file_reciever'&#93; != $_SESSION&#91;'username'&#93; &#41;
			&#123;
				html_page&#40;$lang&#91;'Error'&#93;, $lang&#91;'This_file_is_not_for_you'&#93;&#41;;
				exit;
			&#125;
			else if &#40; $row&#91;'file_reciever'&#93; == $_SESSION&#91;'username'&#93; &#41;
			&#123;
				header&#40;"Content-type&#58; application/force-download"&#41;;
				header&#40;"Content-Transfer-Encoding&#58; Binary"&#41;;
				header&#40;"Content-length&#58; ".$file&#91;'size'&#93;&#41;;
				header&#40;"Content-disposition&#58; attachment; filename=\"".$file&#91;'name'&#93;."\""&#41;;
				readfile&#40;$file&#91;'path'&#93;&#41;;

				$del = "DELETE
					FROM " . FILES_TABLE . "
					WHERE file_basename = '" . escape&#40;&#40;string&#41; $file&#91;'name'&#93;&#41; . "'
					LIMIT 1;";

				if &#40; ! &#40;$delete_result = $db->sql_query&#40;$del&#41;&#41; &#41;
			       &#123;
					html_page&#40;$lang&#91;'Error'&#93;, 'DB Error&#58; &#91;Resource ID #3&#93; Could not delete file from Files Table'&#41;;
				&#125;

				unlink&#40;$file&#91;'path'&#93;&#41;;
				exit;

			&#125;

		&#125;

	&#125;
	else
	&#123;
		html_page&#40;$lang&#91;'Error'&#93;, $lang&#91;'No_such_file'&#93;&#41;;
	&#125;

&#125;

?>

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες