Προς το περιεχόμενο

XML-> MySQL και παράγραφοι


WizeMan

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα σας!

 

Κάνω Parse από ένα xml κείμενο (UTF8) το οποίο έχει παραγράφους και καταχωρείται σε κάποια κελιά σε mysql.

 

όταν όμως τραβάω το κείμενο αυτό από τη βάση και το κάνω echo μέσω php δεν μου βγάζει τη διαμόρφωση των παραγράφων. Με δεξί click προβολή κώδικα οι παράγραφοι φαίνονται (όχι με κώδικα απλά φαίνεται στο κείμενο).

 

Τι λέτε να συμβαίνει και πως θα μπορούσα να το διορθώσω;

Δημοσ.
Με δεξί click προβολή κώδικα οι παράγραφοι φαίνονται (όχι με κώδικα απλά φαίνεται στο κείμενο).

«Όχι με κώδικα»; Μα στην HTML παραγράφους καθορίζεις μόνο με κώδικα. Π.χ. με διακριτά <p> elements. Με το «απλά φαίνεται στο κείμενο» ελπίζω να μην εννοείς κάτι σαν αυτό:

 

>
<div>
   Αυτή είναι η 1η παράγραφος.

   Αυτή είναι η 2η παράγραφος.

   κ.ο.κ.
</div>

 

...και να περιμένεις μάταια το παραπάνω να γίνει render χωρίς να αγνοηθούν οι χαρακτήρες newline και δίνοντας τελικά την όψη παραγράφων!

Δημοσ.

«Όχι με κώδικα»; Μα στην HTML παραγράφους καθορίζεις μόνο με κώδικα. Π.χ. με διακριτά <p> elements. Με το «απλά φαίνεται στο κείμενο» ελπίζω να μην εννοείς κάτι σαν αυτό:

 

>
<div>
   Αυτή είναι η 1η παράγραφος.

   Αυτή είναι η 2η παράγραφος.

   κ.ο.κ.
</div>

 

...και να περιμένεις μάταια το παραπάνω να γίνει render χωρίς να αγνοηθούν οι χαρακτήρες newline και δίνοντας τελικά την όψη παραγράφων!

 

αυτό εννοώ...

γίνεται render διότι όταν το περνάω στη βάση το περνάω με mysql_real_escape_string αλλιώς είχα πρόβλημα κοβόταν

Δημοσ.

Γίνεται 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, οι άλλοι είναι λίγο έως πολύ παπατζίδικοι.

Δημοσ.

Γίνεται 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

Δημοσ.

Θα μπορούσες να κάνεις το άλλο: να αποθηκεύεις το κείμενο στη βάση as-is και να το μετασχηματίζεις κάθε φορά λίγο πριν το τυπώσεις. Αυτό το «κάθε φορά» βέβαια είναι υπολογιστικά πιο απαιτητικό, αλλά με το πλεονέκτημα ότι τα δεδομένα παραμένουν «καθαρά» στη βάση (δεν ξέρω αν σου χρησιμεύσει κάπου, απλά το αναφέρω).

 

Σε κάθε περίπτωση, θα χρειαστείς τις string functions της PHP. Δες την str_replace, αν θυμάμαι καλά.

Δημοσ.

Θα μπορούσες να κάνεις το άλλο: να αποθηκεύεις το κείμενο στη βάση as-is και να το μετασχηματίζεις κάθε φορά λίγο πριν το τυπώσεις. Αυτό το «κάθε φορά» βέβαια είναι υπολογιστικά πιο απαιτητικό, αλλά με το πλεονέκτημα ότι τα δεδομένα παραμένουν «καθαρά» στη βάση (δεν ξέρω αν σου χρησιμεύσει κάπου, απλά το αναφέρω).

 

Σε κάθε περίπτωση, θα χρειαστείς τις string functions της PHP. Δες την str_replace, αν θυμάμαι καλά.

 

χμ... θα πρέπει δηλαδή να κάνω μετατροπές στο script που τυπώνει το κείμενο... θα το τσεκάρω... ευχαριστώ πολύ!!!

Δημοσ.

Τελικά άλλαξα το script που διαβάζει τα δεδομένα... έκλεισα το echo σε <pre wrap></pre> ... το wrap χρειαζόταν γιατί αλλιώς συνέχιζε μέχρι το line change

 

ΣΕ ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ για την βοήθειά σου!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...