Πρόβλημα με Π & GET

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

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

Απάντηση
Άβαταρ μέλους
Stadem
Δημοσιεύσεις: 198
Εγγραφή: 10 Μαρ 2007 20:45

Πρόβλημα με Π & GET

Δημοσίευση από Stadem » 27 Μαρ 2007 12:29

Γεια σε όλα τα μέλη,

Διάβασα πάρα πολλά post αλλά δεν βρήκα κάποια λύση πάνω σε αυτό. Έχω το εξής πρόβλημα, κανονικά στην βάση βλέπω τα ελληνικά, και κανονικά στην σελίδα. Όταν όμως χρησιμοποιώ την εντολή Get για να μεταφέρω ένα value και η λέξη που περιέχει τον χαρακτήρα Π (το κεφαλαίο) μου εμφανίζετε τετραγωνάκι :roll: όλες οι άλλες λέξεις μου εμφανίζονται κανονικά. Τι μπορεί να φταίει?

Για την βάση χρησιμοποιώ :
if (mysql_query("CREATE DATABASE mydata DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;",$con))


για τα tables:
$sql1 = "CREATE TABLE master_nomos
(
id int not null primary key auto_increment,
nomos varchar (25) unique not null collate utf8_unicode_ci
)";


Στην σελίδα<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style type="text/css">


(για όσους θέλουν να έχουν ελληνικά στην βάση και στο web δουλεύουν τέλεια&#8230;χωρίς την Get)

<?php
$value_dimos = $_REQUEST[dimos];
$display_block = "$value_dimos";
?>

<HTML>
<head>
<title>My Address Book</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
(δοκίμασα να το αλλάξω σε charset=iso-8859-7 αλλά και πάλι τιποτα)<BODY>
<?php print $display_block; ?>
</BODY>
</HTML>


Ευχαριστώ προκαταβολικά
web-IQ Interactive Quality
Εικόνα

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με Π & GET

Δημοσίευση από cpulse » 27 Μαρ 2007 13:07

Στην εφαρμογή σου όταν στο URL βάζεις ένα Π, εμφανίζεται σαν %CE%A0 ή σαν κάτι άλλο;

Άβαταρ μέλους
Stadem
Δημοσιεύσεις: 198
Εγγραφή: 10 Μαρ 2007 20:45

Πρόβλημα με Π & GET

Δημοσίευση από Stadem » 27 Μαρ 2007 14:48

cpulse έγραψε:Στην εφαρμογή σου όταν στο URL βάζεις ένα Π, εμφανίζεται σαν %CE%A0 ή σαν κάτι άλλο;
Ευχαριστώ για την ανταπόκριση σου,

Παρατήρησα ότι ακόμα και αν στείλω απευθείας την εντολή για

editdimo.php?dimos=ΠΑΛΑΙΟ&id=2 μου την εμφανίζει &#783;&#1363;&#586;&#979; το παράλογο είναι ότι αν αλλάξω το encode του explorer σελίδας από utf-8 σε ελληνικά windows θα μου δείξει την καταχώρηση ΠΑΛΑΙΟ αλλά δεν μου δείχνει τα άλλα. Δεν μπορώ να καταλάβω.
web-IQ Interactive Quality
Εικόνα

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με Π & GET

Δημοσίευση από cpulse » 27 Μαρ 2007 15:07

Ίσως γιατί αν το γράψεις το γράφεις σε iso ενώ προσπαθεί να το εμφανίσει σε utf-8.
Γι αυτό όταν γράφουμε URL variables πρέπει να τις περνάμε από το urlencode()

Άβαταρ μέλους
Stadem
Δημοσιεύσεις: 198
Εγγραφή: 10 Μαρ 2007 20:45

Πρόβλημα με Π & GET

Δημοσίευση από Stadem » 27 Μαρ 2007 17:08

cpulse έγραψε:Ίσως γιατί αν το γράψεις το γράφεις σε iso ενώ προσπαθεί να το εμφανίσει σε utf-8.
Γι αυτό όταν γράφουμε URL variables πρέπει να τις περνάμε από το urlencode()

Ήταν μία εντολή που δεν την γνώριζα, πραγματικά σε ευχαριστώ πολύ.


Έκανα


$f_nomos = "$nomos";
$f_nomos = urlencode(urlencode($f_nomos));


<a href="editnomo.php?nomos=$f_nomos&id=$id">Επεξεργασία</a>


και μετά για Get

$f_nomos = urldecode($_GET['nomos']);

<input type="text" name="nomos" value="$f_nomos">



είσαι και ο πρώτος! :yea:

thanks
web-IQ Interactive Quality
Εικόνα

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

Πρόβλημα με Π & GET

Δημοσίευση από _Invisible_ » 27 Μαρ 2007 17:29

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

 $f_nomos = urlencode&#40;urlencode&#40;$f_nomos&#41;&#41;; 
γιατί διπλό urlencode() ?

Άβαταρ μέλους
Stadem
Δημοσιεύσεις: 198
Εγγραφή: 10 Μαρ 2007 20:45

Πρόβλημα με Π & GET

Δημοσίευση από Stadem » 27 Μαρ 2007 17:47

_Invisible_ έγραψε:

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

 $f_nomos = urlencode&#40;urlencode&#40;$f_nomos&#41;&#41;; 
γιατί διπλό urlencode() ?

:wink:
Έχεις δίκιο, είναι περιττό.
web-IQ Interactive Quality
Εικόνα

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με Π & GET

Δημοσίευση από cpulse » 27 Μαρ 2007 18:29

Χαίρομαι που έφτιαξε :)

Για κατευθείαν links κράτα το urlencode() αλλά αν είναι να βάζεις links μέσα σε <a> tags καλύτερα το rawurlencode()

Άβαταρ μέλους
Stadem
Δημοσιεύσεις: 198
Εγγραφή: 10 Μαρ 2007 20:45

Πρόβλημα με Π & GET

Δημοσίευση από Stadem » 27 Μαρ 2007 23:37

cpulse έγραψε:Χαίρομαι που έφτιαξε :)

Για κατευθείαν links κράτα το urlencode() αλλά αν είναι να βάζεις links μέσα σε <a> tags καλύτερα το rawurlencode()
:wink:


Τι διαφορά έχει το ένα από το άλλο? Προσπάθησα να βγάλω άκρη από το php.net αλλά μάταια, Βρήκα ένα κώδικα στο http://www.php.net/manual/el/function.urlencode.php
<?php
$path_component = 'machine/generated/part';
$url_parameter1 = 'this is a string';
$url_parameter2 = 'special/weird "$characters"';

$url = 'http://example.com/lab/cgi/test/'. rawurlencode($path_component) . '?param1=' . urlencode($url_parameter1) . '&param2=' . urlencode($url_parameter2);

$link_label = "Click here & you'll be <happy>";

echo '<a href="', htmlspecialchars($url), '">', htmlspecialchars($link_label), '</a>';
?>

αλλά προσπαθώντας να τον ερμηνεύσω βλέπω ότι η διαφορά του ενός από το άλλο είναι ότι το urlencode() δέχεται καλύτερα τα αλφαριθμητικά στοιχεία.
web-IQ Interactive Quality
Εικόνα

Άβαταρ μέλους
Stadem
Δημοσιεύσεις: 198
Εγγραφή: 10 Μαρ 2007 20:45

Πρόβλημα με Π & GET

Δημοσίευση από Stadem » 27 Μαρ 2007 23:38

και κάτι άλλο το htmlspecialchars σε τί βοηθάει? αφού κάνουμε την απαραίτητη κωδικοποίηση με το urlencode() Το ξέρω ρωτάω πολλα. Thanks :wink:
web-IQ Interactive Quality
Εικόνα

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με Π & GET

Δημοσίευση από cpulse » 28 Μαρ 2007 02:28

Το urlencode() μετατρέπει όλους τους μη συμβατούς χαρακτήρες με το URL encoding σε μορφή %xx και το space σε +. To rawurlencode() κάνει τα ίδια αλλά δεν κάνει διάκριση για το +. Θυμάμαι οτι κάποτε συνάντησα κάποια προβλήματα και με το rawurlencode() τα έλυσα. Δεν θυμάμαι ποια ήταν όμως :-? Το έψαξα στο manual και βλέπω οτι κάποιος το αναφέρει σαν αναγκαίο στην περίπτωση που το link είναι παράμετρος για mailto link.

Το htmlspecialchars() χρησιμεύει για εμφάνιση σε HTML.
Στον κώδικα σου το χρησιμοποιείς λάθος. Εκεί που γράφεις

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

echo '<a href="', htmlspecialchars&#40;$url&#41;, '">', htmlspecialchars&#40;$link_label&#41;, '</a>';
θα πρέπει να βάλεις

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

echo '<a href="', urlencode&#40;$url&#41;, '">', htmlspecialchars&#40;$link_label&#41;, '</a>';

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με Π & GET

Δημοσίευση από cpulse » 28 Μαρ 2007 02:37

Οπα άκυρο!!! Είναι κι η ώρα δύσκολη :):)

Το htmlspecialchars() ψάχνει και αλλάζει τους χαρακτήρες: < > " &
Οι < > " έτσι κι αλλιώς δεν επιτρέπονται σε file names και URLs, το & χρησιμοποιείται για να χωρίζει παραμέτρους, άρα δεν χρειάζεται επιπλέον κωδικοποίηση. Το σωστό είναι έτσι:

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

echo '<a href="', $url, '">', htmlspecialchars&#40;$link_label&#41;, '</a>';
Όμως!.. και το & κανονικά σε HTML θα πρέπει να γράφεται σαν &amp; .. πολύς κόσμος δεν το προσέχει.

Στον κώδικα σου πρόσεξε το $path_component και το & :

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

$url = 'http&#58;//example.com/lab/cgi/test/'. $path_component . '?param1=' . urlencode&#40;$url_parameter1&#41; . '&amp;param2=' . urlencode&#40;$url_parameter2&#41;;

Άβαταρ μέλους
Stadem
Δημοσιεύσεις: 198
Εγγραφή: 10 Μαρ 2007 20:45

Πρόβλημα με Π & GET

Δημοσίευση από Stadem » 28 Μαρ 2007 22:42

Thanks η βοήθεια σου είναι καταπληκτική! Πάλι καλά που υπάρχουν και τα forums και λύνουμε καμία απορία! :kaloe:
web-IQ Interactive Quality
Εικόνα

Απάντηση

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

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

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