Το πραγματικό πρόβλημα προέρχεται όταν χρειαστεί να επιτρέψετε δυνητικά κακόβουλους χρήστες να εισάγετε HTML εισροών. Αυτό είναι όπου θα πρέπει να απομακρύνουν με μη αυτόματο τρόπο κάθε ενδεχομένως κακόβουλο πράγματα πριν να το εμφανίσει. Το πρόβλημα με αυτή την προσέγγιση είναι ότι αυτό μπορεί να πάρει πολύ περίπλοκο να κάνει αξιόπιστα. τα περισσότερα προγράμματα περιήγησης επιτρέπουν ένα τέτοιο υψηλό βαθμό ακατάλληλη εισόδου που έχει αποδειχθεί ότι είναι σχεδόν αδύνατο για σας να λάβει όλα αυτά υπόψη, και έχουν υπάρξει αμέτρητες παραδείγματα καταλαβαίνω ανθρώπους, παρακάμπτοντας το εισόδου απογύμνωση από τη καθιστώντας ακατάλληλο, αλλά με τέτοιο τρόπο ότι τα προγράμματα περιήγησης ακόμα να το καταλάβω.Αυτό είναι γιατί, να αποφύγετε την ταλαιπωρία αυτή ολόκληρη αλλά να εξακολουθούν να επιτρέπουν για κάποιες βασικές δυνατότητες HTML για το μεγάλο κοινό, εναλλακτικές λύσεις όπως BBCode και UBB χρησιμοποιούνται συχνά. Σημαντικό πλεονέκτημα εδώ είναι ότι μπορείτε να ελέγξετε ρητά τις ετικέτες που μπορούν να χρησιμοποιηθούν και που δεν μπορεί, και ότι οι ετικέτες που δεν επιτρέπονται απλά δεν θα είναι δυνατή η ανάλυση. Δεδομένου ότι η προσέγγιση αυτή αντικαθιστά τις συνήθεις ετικέτες HTML (που είναι εκτέλεση-πελάτη) με ισοδύναμο Ετικέτες BBCode (που είναι εκτέλεση διακομιστή), θα θελήσετε ακόμα να ισχύει htmlentities όμως - διαφορετικά οι χρήστες θα μπορούσε να εξακολουθούν να χρησιμοποιούν τακτικά τις ετικέτες HTML. Γράφοντας ένα BBCode ή UBB ανάλυσης μπορεί να είναι πιο περίπλοκη από ό, τι φαίνεται εκ πρώτης όψεως, έτσι θα σας συμβούλευα να χρησιμοποιήσετε μερικές από τις εξαιρετικές υπάρχουσες βιβλιοθήκες εκεί έξω, αντί να γράψετε τη δική σας.Όσο για htmlentities vs htmlspecialchars, η διαφορά είναι ότι htmlentities διαφεύγει περισσότερους χαρακτήρες από htmlspecialchars. Για τους σκοπούς της διαφυγή εισόδου htmlspecialchars χρήστη θα δουλεύουν μια χαρά εγώ, αλλά γιατί να μην ξεφύγουν περισσότερο;Για σας πρόβλημα, εδώ είναι τι μπορείτε να κάνετε: ο χρήστης εισάγει τη συμβολή του σε ένα πρότυπο . This textarea contains his input with the lines separated by a newline character (
). You simply take the input from the textarea, and insert it into the DB as-is. Then, when displaying it again, you apply htmlentities to it, and then run it through nl2br - this will convert the newlines to <br/> tags. Otherwise the newlines would only show up in the HTML source, and not on the rendered page. Note that you first apply htmlentities and then nl2br; if you had done it the other way around, the 's would have escaped by htmlentities.<br /><br />When you want to enable the user to edit his input again, you apply htmlentities and echo it back between <textarea> and . Εδώ, δεν έχετε να εφαρμόσει nl2br - τον έλεγχο textarea προέρχεται από τις νέες γραμμές στον πηγαίο κώδικα. Επίσης, οι φορείς που δραπέτευσε από htmlentities θα είναι un-δραπέτευσε και πάλι από το πρόγραμμα περιήγησης πριν από την αποστολή των δεδομένων φόρμας? με αυτό τον τρόπο θα κρατήσετε την αρχική συμβολή τους αντί της διάσωσης των οντοτήτων που δραπέτευσε στο ΣΠ.
Μεταφράζονται, παρακαλώ περιμένετε..
