Σχόλια και βάση

Ερωτήσεις και απαντήσεις σχετικές με την HTML, XHTML και την κατασκευή σελίδων για το Web.

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

Απάντηση
freds
Δημοσιεύσεις: 320
Εγγραφή: 24 Φεβ 2005 16:11

Σχόλια και βάση

Δημοσίευση από freds » 21 Ιούλ 2005 19:27

Την καλησπέρα μου.
Φτιάχνω ένα site στο οποίο τα μέλη του θα έχουν τη δυνατότητα να γράφουν κάποια σχόλια για κάποια άρθρα. Έχω φτιάξει τη βάση, γίνεται κανονικά η εισαγωγή τους στη βάση καθώς επίσης τα εμφανίζω και σε μια σελίδα.
Το θέμα που με απασχολεί είναι αν υπάρχει κάποιος "κακόβουλος" ή έστω δέχομαι ότι μπορεί να γίνει κατά λάθος και να γράψει κάτι σαν και αυτό

ααααααααααααασσσσσσσσσσσσ...δδδδδδδδδ

Σκεφτήτε όμως ότι δεν υπάρχουν οι τελίτσες αλλά μια ακολουθία γραμμάτων χωρίς κενά. Τότε όταν παρουσιάζεται αυτό το μήνυμα η σελίδα ξεχειλώνει προς τα δεξιά. Υπάρχει κάποιος έγκυρος τρόπος να αποφύγω αυτό το πρόβλημα;

Thanks.

Υ.Γ. Φαντάζομαι ότι μπορεί να γίνει κάτι με html και όχι με php ή την mySQL με τις οποίες δουλεύω και γι'αυτό κάνω το post εδώ.

Άβαταρ μέλους
agrippas
Script Master
Δημοσιεύσεις: 494
Εγγραφή: 18 Ιούλ 2002 14:52
Τοποθεσία: Υπερπέραν
Επικοινωνία:

Σχόλια και βάση

Δημοσίευση από agrippas » 21 Ιούλ 2005 19:39

Ο πιο αποτελεσματικός τρόπος για να το λύσεις αυτό είναι από server-side με php. Θα πιάσεις όλο το string και θα το κόψεις σε λέξεις και αν κάποια είναι πιο μεγάλη από 50-60 χαρακτήρες πχ. θα του ρίξεις άκυρο.

Από client-side μπορείς να κάνεις το ίδιο με JavaScript αλλά δε θα δουλέψει αν ο επισκέπτης την έχει κλειστή. Μπορείς επίσης να κλείσεις το σχόλιο σε ένα <div> με σταθερό πλάτος και κατάλληλο χειρισμό του overflow από το style.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Σχόλια και βάση

Δημοσίευση από skeftomilos » 22 Ιούλ 2005 08:36

Το overflow είναι μάλλον το απλούστερο θα έλεγα, και το πιο συνηθισμένο. :)

Για να κοπούν τα μονοκόμματα string μπορεί να χρησιμοποιηθεί και το μάλλον άγνωστο tag <wbr>, που παίζει το ρόλο του soft line break. Κόβει τη γραμμή μόνο όταν είναι ανάγκη, οπότε βάζουμε όσα θέλουμε. Για παράδειγμα αν υπάρχει ένα μονοκόμματο string 500 χαρακτήρων, μπορούν να μπουν 50 <wbr> ανά 10 χαρακτήρες.

Αν θέλεις δοκίμασε το παρακάτω script που σπάει όλα μεγάλα block κειμένου. Το σκάρωσα τώρα στα πεταχτά. :P Δεν το δοκίμασα σε πολύ μεγάλες σελίδες οπότε δεν εγγυώμαι για την ταχύτητα εκτέλεσης.

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

<script type="text/javascript">
  window.onload = function&#40;&#41; &#123;
    var MIN_BLOCK_LENGTH = 100
    var FRAGMENT_LENGTH = 10

    var re_large_block = new RegExp&#40;"\\S&#123;" + MIN_BLOCK_LENGTH + ",&#125;"&#41;

    var break_element_recursive = function&#40;element&#41; &#123;
      var child = element.firstChild
      while&#40;child&#41; &#123;
        if &#40;child.nodeType == 1&#41; &#123;
          break_element_recursive&#40;child&#41;
        &#125; else if &#40;child.nodeType == 3&#41; &#123;
          break_text_recursive&#40;child&#41;
        &#125;
        child = child.nextSibling
      &#125;
    &#125;

    var break_text_recursive = function&#40;node&#41; &#123;
      if &#40;!re_large_block.test&#40;node.nodeValue&#41;&#41; return
      var match = node.nodeValue.match&#40;re_large_block&#41;

      var left_string = node.nodeValue.substring&#40;0, match.index&#41;
      var middle_string = match&#91;0&#93;
      var right_string = node.nodeValue.substring&#40;match.index + match&#91;0&#93;.length&#41;

      var left_node = document.createTextNode&#40;left_string&#41;
      node.parentNode.insertBefore&#40;left_node, node&#41;
      node.nodeValue = right_string

      while&#40;middle_string.length > 0&#41; &#123;
        var fragment = document.createTextNode&#40;middle_string.substr&#40;0, FRAGMENT_LENGTH&#41;&#41;
        node.parentNode.insertBefore&#40;fragment, node&#41;
        middle_string = middle_string.substr&#40;FRAGMENT_LENGTH&#41;
        if &#40;middle_string.length > 0&#41; &#123;
          var wbr = document.createElement&#40;"wbr"&#41;
          node.parentNode.insertBefore&#40;wbr, node&#41;
        &#125;
      &#125;
      break_text_recursive&#40;node&#41;
    &#125;
        
    break_element_recursive&#40;document.body&#41; /* Ξεκινάει τη διαδικασία*/
  &#125;
</script>
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Σχόλια και βάση

Δημοσίευση από Rapid-eraser » 22 Ιούλ 2005 11:40

vomizo to pio siveto eivai va eivai modarated ta mivimata.
Apla dev 8a ta emfavizeis me tnv mia (ektos kai av exeis kapoious trusted xristes) 8a ta kaveis modarate kai stnv sivexeia 8a sbiveis n 8a dixveis afta pou prepei.

Afto pistebw 8a se sosei apo poles katastaseis.

Kai kati allo miv bazeis ta data apo tous xristes etsi xima stnv basi pavtote 8a kaveis dio pragmata
Filtering kai escape . Dld 8a koitazeis pos ta data eivai tis sostis morfis (px movo text n movo sigkekrimeva tags) kai stnv sivexeia 8a kaveis escapte tous xaraktires pou prepei gia va to peraseis stnv basi (px addslashes)
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

freds
Δημοσιεύσεις: 320
Εγγραφή: 24 Φεβ 2005 16:11

Σχόλια και βάση

Δημοσίευση από freds » 22 Ιούλ 2005 11:54

Thanks skeftomilos poli kalo to script doulepse amesos.

Ta minimata tha einai moderated oso einai auto dinaton. Oi xristes tha einai trusted, me onoma kai eponimo alla pote den xereis.

Eyxaristo guys. FS rules!!!

Απάντηση

Επιστροφή στο “HTML και XHTML”

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

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