WizeMan Δημοσ. 14 Μαρτίου 2011 Δημοσ. 14 Μαρτίου 2011 Καλημέρα σας! Κάνω Parse από ένα xml κείμενο (UTF8) το οποίο έχει παραγράφους και καταχωρείται σε κάποια κελιά σε mysql. όταν όμως τραβάω το κείμενο αυτό από τη βάση και το κάνω echo μέσω php δεν μου βγάζει τη διαμόρφωση των παραγράφων. Με δεξί click προβολή κώδικα οι παράγραφοι φαίνονται (όχι με κώδικα απλά φαίνεται στο κείμενο). Τι λέτε να συμβαίνει και πως θα μπορούσα να το διορθώσω;
parsifal Δημοσ. 14 Μαρτίου 2011 Δημοσ. 14 Μαρτίου 2011 Με δεξί click προβολή κώδικα οι παράγραφοι φαίνονται (όχι με κώδικα απλά φαίνεται στο κείμενο). «Όχι με κώδικα»; Μα στην HTML παραγράφους καθορίζεις μόνο με κώδικα. Π.χ. με διακριτά <p> elements. Με το «απλά φαίνεται στο κείμενο» ελπίζω να μην εννοείς κάτι σαν αυτό: > <div> Αυτή είναι η 1η παράγραφος. Αυτή είναι η 2η παράγραφος. κ.ο.κ. </div> ...και να περιμένεις μάταια το παραπάνω να γίνει render χωρίς να αγνοηθούν οι χαρακτήρες newline και δίνοντας τελικά την όψη παραγράφων!
WizeMan Δημοσ. 14 Μαρτίου 2011 Μέλος Δημοσ. 14 Μαρτίου 2011 «Όχι με κώδικα»; Μα στην HTML παραγράφους καθορίζεις μόνο με κώδικα. Π.χ. με διακριτά <p> elements. Με το «απλά φαίνεται στο κείμενο» ελπίζω να μην εννοείς κάτι σαν αυτό: > <div> Αυτή είναι η 1η παράγραφος. Αυτή είναι η 2η παράγραφος. κ.ο.κ. </div> ...και να περιμένεις μάταια το παραπάνω να γίνει render χωρίς να αγνοηθούν οι χαρακτήρες newline και δίνοντας τελικά την όψη παραγράφων! αυτό εννοώ... γίνεται render διότι όταν το περνάω στη βάση το περνάω με mysql_real_escape_string αλλιώς είχα πρόβλημα κοβόταν
parsifal Δημοσ. 14 Μαρτίου 2011 Δημοσ. 14 Μαρτίου 2011 Γίνεται render, δεν είπα το αντίθετο. Αλλά όπως είναι γνωστό (?), κατά το rendering αγνοούνται οι χαρακτήρες newline καθώς και οι άνω του ενός διαδοχικοί whitespace χαρακτήρες (εξαίρεση αποτελεί η περίπτωση τα παραπάνω να περιέχονται μέσα στο ειδικό HTML element <pre>). Οι παράγραφοι στην HTML είναι ένα "semantically important" πράμα, δεν είναι απλά δύο \n [και ένα \t] στη σειρά! Πώς θα λύσεις το πρόβλημα; Να μερικοί τρόποι: 1. Έδωσα hint πιο πάνω. Μπορείς να κάνεις echo το string με το κείμενό σου μέσα σε <pre> 2. Κατά το XML parsing, διαχωρίζεις τις παραγράφους και αποθηκεύεις καθεμία χωριστά στη βάση σου. Επίσης, τις κάνεις echo χωριστά, καθεμία μέσα στο δικό της <p> 3. Παρόμοιο με το 2, αλλά στη βάση αποθηκεύεις το αποτέλεσμα του concatenation όλων των παραγράφων, μεταξύ των οποίων έχεις παρεμβάλει άνοιγμα και κλείσιμο <p> tag. Οπότε, όταν έρθει η ώρα για echo του μονολιθικού αυτού string, δεν χρειάζεται καν να το περικλείσεις μέσα σε κάποιο tag Ο πιο ορθόδοξος τρόπος μου φαίνεται ο 2, οι άλλοι είναι λίγο έως πολύ παπατζίδικοι.
WizeMan Δημοσ. 14 Μαρτίου 2011 Μέλος Δημοσ. 14 Μαρτίου 2011 Γίνεται render, δεν είπα το αντίθετο. Αλλά όπως είναι γνωστό (?), κατά το rendering αγνοούνται οι χαρακτήρες newline καθώς και οι άνω του ενός διαδοχικοί whitespace χαρακτήρες (εξαίρεση αποτελεί η περίπτωση τα παραπάνω να περιέχονται μέσα στο ειδικό HTML element <pre>). Οι παράγραφοι στην HTML είναι ένα "semantically important" πράμα, δεν είναι απλά δύο \n [και ένα \t] στη σειρά! Πώς θα λύσεις το πρόβλημα; Να μερικοί τρόποι: 1. Έδωσα hint πιο πάνω. Μπορείς να κάνεις echo το string με το κείμενό σου μέσα σε <pre> 2. Κατά το XML parsing, διαχωρίζεις τις παραγράφους και αποθηκεύεις καθεμία χωριστά στη βάση σου. Επίσης, τις κάνεις echo χωριστά, καθεμία μέσα στο δικό της <p> 3. Παρόμοιο με το 2, αλλά στη βάση αποθηκεύεις το αποτέλεσμα του concatenation όλων των παραγράφων, μεταξύ των οποίων έχεις παρεμβάλει άνοιγμα και κλείσιμο <p> tag. Οπότε, όταν έρθει η ώρα για echo του μονολιθικού αυτού string, δεν χρειάζεται καν να το περικλείσεις μέσα σε κάποιο tag Ο πιο ορθόδοξος τρόπος μου φαίνεται ο 2, οι άλλοι είναι λίγο έως πολύ παπατζίδικοι. δυστυχώς δεν μπορώ να κάνω το 2 γιατί κάθε κείμενο πρέπει να μπει σε συγκεκριμένο cell στη βάση. Υπάρχει τρόπος να μετατρέψω τα \n κτλ σε <p></p> πριν περάσω στη βάση τα κείμενα; είμαι εντελώς noob σε όλα αυτά και πάω ψάχνοντας sorry για το ignorance
parsifal Δημοσ. 14 Μαρτίου 2011 Δημοσ. 14 Μαρτίου 2011 Θα μπορούσες να κάνεις το άλλο: να αποθηκεύεις το κείμενο στη βάση as-is και να το μετασχηματίζεις κάθε φορά λίγο πριν το τυπώσεις. Αυτό το «κάθε φορά» βέβαια είναι υπολογιστικά πιο απαιτητικό, αλλά με το πλεονέκτημα ότι τα δεδομένα παραμένουν «καθαρά» στη βάση (δεν ξέρω αν σου χρησιμεύσει κάπου, απλά το αναφέρω). Σε κάθε περίπτωση, θα χρειαστείς τις string functions της PHP. Δες την str_replace, αν θυμάμαι καλά.
WizeMan Δημοσ. 15 Μαρτίου 2011 Μέλος Δημοσ. 15 Μαρτίου 2011 Θα μπορούσες να κάνεις το άλλο: να αποθηκεύεις το κείμενο στη βάση as-is και να το μετασχηματίζεις κάθε φορά λίγο πριν το τυπώσεις. Αυτό το «κάθε φορά» βέβαια είναι υπολογιστικά πιο απαιτητικό, αλλά με το πλεονέκτημα ότι τα δεδομένα παραμένουν «καθαρά» στη βάση (δεν ξέρω αν σου χρησιμεύσει κάπου, απλά το αναφέρω). Σε κάθε περίπτωση, θα χρειαστείς τις string functions της PHP. Δες την str_replace, αν θυμάμαι καλά. χμ... θα πρέπει δηλαδή να κάνω μετατροπές στο script που τυπώνει το κείμενο... θα το τσεκάρω... ευχαριστώ πολύ!!!
WizeMan Δημοσ. 18 Μαρτίου 2011 Μέλος Δημοσ. 18 Μαρτίου 2011 Τελικά άλλαξα το script που διαβάζει τα δεδομένα... έκλεισα το echo σε <pre wrap></pre> ... το wrap χρειαζόταν γιατί αλλιώς συνέχιζε μέχρι το line change ΣΕ ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ για την βοήθειά σου!
parsifal Δημοσ. 18 Μαρτίου 2011 Δημοσ. 18 Μαρτίου 2011 ΟΚ. Τουλάχιστον προειδοποίησα ότι δεν είναι ο «καθαρότερος» τρόπος κι έχω τη συνείδησή μου ήσυχη...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.