Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 16009|Απάντηση: 2

[ASP.NET] Κωδικοποίηση και αποκωδικοποίηση URL σε ASP.NET

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 12/1/2016 1:04:21 μ.μ. | | | |

Ας ρίξουμε μια ματιά στις ακόλουθες δύο διευθύνσεις URL, περνούν τις ίδιες παραμέτρους;
aaa.aspx?tag=.net%bc%bc%ca%f5
aaa.aspx?tag=.NET%E6%8A%80%E6%9C%AF

Φαίνεται να είναι διαφορετικό, αλλά στην πραγματικότητα, όλοι χρησιμοποιούν UrlEncode για "τεχνολογία .net", αλλά το ένα είναι κωδικοποίηση GB2312 και το άλλο είναι κωδικοποίηση Utf-8.
Ο ακόλουθος κώδικας μπορεί να αποκτήσει το παραπάνω εφέ κωδικοποίησης:

συμβολοσειρά tmp1 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.GetEncoding("GB2312"));
συμβολοσειρά tmp2 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.UTF8);

Οι πραγματικές ιστοσελίδες μας ενδέχεται να καλούνται από άλλα προγράμματα.
Για παράδειγμα, απλοποιημένα κινεζικά μια σελίδα ASP στο λειτουργικό σύστημα πρέπει να μεταβιβάσει μια παράμετρο κινεζικών σε μια σελίδα ASP.net.
Από προεπιλογή, στα απλοποιημένα λειτουργικά συστήματα Κινεζικών, η μέθοδος Server.UrlEncode του ASP θα κωδικοποιήσει τα Κινεζικά με κωδικοποίηση GB2312.
Αλλά από προεπιλογή, ASP.net σελίδες είναι κωδικοποιημένες σε UTF-8.
Σε αυτήν την περίπτωση, όταν χρησιμοποιείτε το Request.QueryString["Tag"] για να αποδεχτείτε την τιμή, δεν θα μπορείτε να αποδεχτείτε κινεζικές πληροφορίες και θα δείτε αλλοιωμένους χαρακτήρες στον εντοπισμό σφαλμάτων βήμα προς βήμα.
Προς το παρόν, παρόλο που το Request.QueryString["Tag"] είναι αποδεκτό με αλλοιωμένους χαρακτήρες, η διεύθυνση URL αυτή τη στιγμή δεν είναι αλλοιωμένη.

Η λύση είναι να αναλύσετε μόνοι σας τις παραμέτρους στη διεύθυνση URL και, στη συνέχεια, να αποκρυπτογραφήσετε τις τιμές των παραμέτρων σύμφωνα με την κωδικοποίηση του GB2312, αντί να χρησιμοποιήσετε την προεπιλεγμένη κωδικοποίηση UTF-8 του .net.
Στην πραγματικότητα, η Microsoft παρέχει ομοίως αντίστοιχες λειτουργίες, επομένως δεν χρειάζεται να χρησιμοποιούμε κανονικές εκφράσεις για να αναλύσουμε μόνοι μας τις συμβολοσειρές URL.

Ο κωδικός επίδειξης έχει ως εξής:

συμβολοσειρά q = Request.Url.Query;

System.Collections.Specialized.NameValueCollection nv =
System.Web.HttpUtility.ParseQueryString(q, System.Text.Encoding.GetEncoding("GB2312"));
Response.Write(nv["Tag"]);

Ας χρησιμοποιήσουμε το .NET Reflector του Lutz Roeder για να δούμε την υλοποίηση της μεθόδου System.Web.HttpUtility.ParseQueryString:
Αν συνεχίσουμε να ελέγχουμε, μπορούμε να δούμε ότι ο κώδικας που τελικά χειρίζεται την ανάλυση συμβολοσειράς παραμέτρων URL είναι ο εξής:

Η ακόλουθη συνάρτηση της κλάσης System.Web.HttpValueCollection υλοποιεί την ανάλυση της παραμέτρου URL
Εδώ βλέπουμε ότι είναι μια ανάλυση που πραγματοποιείται από κάθε χαρακτήρα.



Όσο για το είδος της μεθόδου κωδικοποίησης που μας περνά το άλλο μέρος, είναι καλύτερο να το περάσουμε ως παράμετρο, ώστε να μπορούμε να το αποκρυπτογραφήσουμε σύμφωνα με αυτήν την παράμετρο του χρήστη.




Προηγούμενος:Θα διακοσμήσω το σπίτι μου σε στούντιο για να δουλέψω;
Επόμενος:AssemblyInfo.cs τη συγκεκριμένη επεξήγηση των παραμέτρων του αρχείου
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 4/12/2024 5:15:50 μ.μ. |
Κωδικοποίηση και αποκωδικοποίηση URL .NET Core

 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 4/12/2024 5:35:32 μ.μ. |
Τα διάφορα σύνολα χαρακτήρων κωδικοποιούνται ως εξής:



Κώδικας:



Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com