go backsqlschool blogs list

How to clear HTML/XML Tags from a string

by Antonios Chatzipavlis

Σε αυτό το post θα σας παρουσιάσω ένα θέμα το οποίο είναι κάτι που αντιμετωπίζουν οι web developers και ιδιαίτερα αυτοί που ασχολούνται με Content Management Systems (CMS). 

Όπως είναι γνωστό σε αυτά αποθηκεύουμε το περιεχόμενο που βάζουμε στα sites μας, είτε σαν HTML, είτε σαν XML ή κάτι άλλο. Αρκετές είναι οι περιπτώσεις που χρειαζόμαστε να αντλήσουμε από αυτά μόνο το καθαρό περιεχόμενο  αγνοώντας δηλαδή τα διάφορα HTML/XML tags.

Για να λυθεί το συγκεκριμένο πρόβλημα πρέπει να βρεθεί το pattern αυτό με το οποίο θα εντοπίζονται τα διάφορα tags ώστε να αποκλείονται από το τελικό αποτέλεσμα.

Η εύκολη προσέγγιση και μπορώ να πω και αποδεχτή είναι να υλοποιηθεί μια SQL-CLR function και η οποία να γίνει SQL Function.

Σε αυτή μπορούμε να κάνουμε χρήση ενός Regular Expression με βάση το οποίο θα γίνει αναζήτηση και αντικατάσταση των tags.

Όπως είπα και παραπάνω το μυστικό είναι λοιπόν να γράψεις σωστά το regex.
Αυτό το regex είναι το εξής "<[^>]*?>|<[^>]*>" και για το χρησιμοποιήσεις δεν έχει παρά να το εφαρμόσεις πάνω στον string που περιέχει τα δεδομένα περιεχομένου του CMS.

Μια απλή προσέγγιση για την λύση του προβλήματος είναι η παρακάτω

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString ClearHTMLTags ( SqlString s )
    {
   string pattern = @"<[^>]*?>|<[^>]*>";
        Regex rgx = new Regex ( pattern );
        return rgx.Replace ( s1 , String.Empty );
    }

Η συγκεκριμένη υλοποίηση είναι το 90% της λύσης. Το υπόλοιπο 10% σας το αφήνω σαν άσκηση μιας και βρισκόμαστε τον μήνα που ξεκινάνε τα σχολεία.

Επίσης σαν T-SQL challenge σας αφήνω την υλοποίηση αυτής σε T-SQL.  Θα ήθελα όμως να δω αυτές τις λύσεις και που ξέρετε μπορεί να έχουμε και νικητή με κέρδος  ;)

/*antonch*/

Ημερομηνία: 06 September 2012 09:58
Share it:

Σχόλια - Comments

user-gravatar

Στις 27 Sep 2012 @ 9:23 PM o/η Γαβρίλης έγραψε:

Θα ήθελα να διαφωνίσω (πλήρως).Η απάντηση στο Stackoverflow: http://stackoverflow.com/a/1732454/128165 νομίζω τα λέει όλα..Εκτός και αν μιλάμε για αυστηρά ελεγχόμενο/προσδιορισμένο υποσύνολο της HTML.

user-gravatar

Στις 27 Sep 2012 @ 9:52 PM o/η antonch έγραψε:

Νομίζω ότι ήμουν σαφής στον προσδιορισμό μου. Δεν μίλησα γενικά για την HTML αλλά για την HTML που συνήθως υπάρχει σε ένα CMS και που είναι συγκεκριμένη καθώς δεν επιτρέπονται όλα. Άρα το περιεχόμενο είναι συγκεκριμένο και προσδιορισμένο. Η συγκεκριμένη ανάγκη βγήκε σε μένα όταν θέλησα να κάνω migrate το blog μου από την wordpress εδώ. Και όπως φαντάζομαι γνωρίζεις δεν μπορείς να βάλεις ότι tag θέλεις σε αυτή την πλατφόρμα αλλά και σε πολλές άλλες που τουλάχιστον προσωπικά έχω δουλέψει. Το συγκεκριμένο δουλεύει αρκετά καλά σε πολλές περιπτώσεις. Σίγουρα θα υπάρχουν και περιπτώσεις που θα αποτύχει αλλά ναι σε ένα τέτοιο περιβάλλον τα αποτελέσματα του είναι άριστα.

Αφήστε το σχόλιο σας - Leave your comment

Τα σχόλια έχουν κλείσει.
Επιτρέπονται μόνο τα σχόλια από τα μέλη του SqlSchool.gr.


newsletter subscription

Εάν επιθυμείτε να λαμβάνετε ενημέρωση από εμάς, δώστε μας το e-mail σας.
PASS chapter logo
Official Professional Association for SQL Server (PASS) chapter for Greece
Join to PASS