Πρόβλημα με διαφορετική κωδικοποίηση rss feed | ιστοσελίδας

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

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

Απάντηση
grego
Δημοσιεύσεις: 13
Εγγραφή: 01 Αύγ 2008 23:15

Πρόβλημα με διαφορετική κωδικοποίηση rss feed | ιστοσελίδας

Δημοσίευση από grego » 11 Σεπ 2008 23:14

Αν τραβάμε κάποιο rss feed με κάποιον php-parser και το feed είναι σε windows ή ISO κωδικοποίηση ενώ η σελίδα μας σε UTF , τότε υπάρχει κάποιος τρόπος να εμφανίζονται σωστά τα στοιχεία που τραβάμε από το feed στη σελίδα μας ;

Εκτός της χρήσης iframe , μήπως είναι δυνατό να κάνουμε κάποια μετατροπή ή κάτι ανάλογο ώστε να μην παίζει ρόλο η διαφορά κωδικοποίησης του feed και της σελίδας ;

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με διαφορετική κωδικοποίηση rss feed | ιστοσελίδας

Δημοσίευση από cpulse » 14 Σεπ 2008 12:53

Υπάρχουν οι iconv και mb_convert_encoding.

Κάνε την μετατροπή πριν κάνεις parse το xml, αλλά θυμήσου να αλλάξεις και το encoding που γράφει στον header του xml.

grego
Δημοσιεύσεις: 13
Εγγραφή: 01 Αύγ 2008 23:15

Πρόβλημα με διαφορετική κωδικοποίηση rss feed | ιστοσελίδας

Δημοσίευση από grego » 14 Σεπ 2008 18:10

έστω πως κάνω χρήση του :
<?php
echo iconv("ISO-8859-1", "UTF-8", "This is a test.");
?>
πως θα αλλάξω το
να αλλάξεις και το encoding που γράφει στον header του xml.
αφού το xml feed το δίνει ο webmaster του site που έκανε τη σελίδα ;

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πρόβλημα με διαφορετική κωδικοποίηση rss feed | ιστοσελίδας

Δημοσίευση από cpulse » 14 Σεπ 2008 22:21

Τα xml συνήθως έχουν ένα header που γράφει το encoding τους.

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

<?xml version="1.0" encoding="iso-8859-1" ?>
Μπορείς να ανοίξεις ένα τέτοιο αρχείο, να βλέπεις αν το encoding είναι κάτι διαφορετικό από utf-8 και αν ισχύει αυτό να κάνεις μεν την μετατροπή με την iconv() αλλά και να βάζεις το σωστό encoding στον header. Όλα αυτά μπορούν να γίνουν με την βοήθεια ενός regular expression:

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

$filename = '/path/to/file.xml';

$content = file_get_contents&#40;$filename&#41;;

if &#40;preg_match&#40;'~^\s*<\?xml.*encoding\s*="&#40;&#91;^"&#93;*&#41;".*\?>~i', $content, $m&#41;&#41; &#123;
	$from_encoding = trim&#40;strtolower&#40;$m&#91;1&#93;&#41;&#41;;
	if &#40;$from_encoding != 'utf-8'&#41; &#123;
		$content = str_replace&#40;$m&#91;0&#93;, str_replace&#40;$from_encoding, 'utf-8', $m&#91;0&#93;&#41;, $content&#41;;
		$content = iconv&#40;$from_encoding, 'utf-8', $content&#41;;
		file_put_contents&#40;$filename, $content&#41;;
	&#125;
&#125;
Αντί για file_put_contents μπορείς ίσως αν θες να διαβάσεις το αρχείο κατευθείαν. Ίσως με τις νέες βιβλιοθήκες (SimpleXML, XMLReader κτλ) να γίνονται όλα αυτά και ποιο αυτόματα. Δεν το χω ψάξει τόσο πολύ.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

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

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