Page 1 of 1

Kodierungen: win1251 vs utf-8

Posted: Mon 10. Oct 2005, 14:00
by Chilly_Bang
Hallo an alle!

Folgendes Problemchen:
die ganze Seite im phpwcms ist bei mir in utf-8 kodiert. Jetzt versuche ich gerade ein Nachrichten-Kontentpart zu erstellen, wo ein XML-Feed in HTML übersetzt und auf der Seite platziert wird. Alles klappt, bis auf eine Sache:
Die .php-Datei, wo xml-html-Wandlung stattfindet ist mit win1251 kodiert - xml-Feed kommt auf Russisch. Beim Öffnen der Datei im Browser sieht alles super aus - Browser erkennt die Kodierung. Beim Einfügen der .php-Datei per Replacement Tag gibt es Konflikt - Browser erkennt die utf-8 (wie in der ganzen Seite), und macht das Teil in win1251 unlesbar.
Wenn man per Hand im Browser auf win1251 schaltet - so wird dann nur dieses Contentpart lesbar, alles andere aber nicht:)
Wenn man aber in der .php-Datei die Kodierung auf utf-8 stellt, so bleibt sie auch beim Abruf aus Browser unlesbar.

Eure Ratschläge sind dringend erwünscht:)

da ist die php-datei:

Code: Select all

<?php /* 
 
 
 /*function select_box($array, $selected, $name) { 

 // This is selectbox-function 

 $out = "<select name=\"$name\">"; 
 foreach ($array as $key => $value) $out .= sprintf("<option value=\"$key\"%s>$value</option>\n", $key == $selected ? ' selected' : ''); 
 return $out."</select>";

 } 
 */ 
 /* 
 * This is the dataarray containing the URLs and Names of the 
 * feeds to fetch. The URL goes as key. 
 */ 

 $backends2 = array( 
 "http://partner.dwelle.de/syndication/buffered/rss-feeds.510.rdf" => "ru", 
 
); 

 if (!$backend2) { 
 // If no backend is chosen, chose a random 
 srand((float) microtime() * 10000000); 
 $backend2 = array_rand($backends2); 
 } 

 // print "<h1>".$backends[$backend]."</h1>"; 
 // The form containing the selectbox 

 // print "<form action='$PHP_SELF' method='POST'>"; 
 // print select_box($backends, $backend, "backend"); 
 // print "&nbsp;<input type='submit'>"; 
 // print "</form>"; 

 // Some vars used later on 

 $insideitem = false; 
 $tag = ""; 
 $title = ""; 
 $date = "";
 $description = ""; 
 $link = ""; 
 $catagory = ""; 

 function startElement2($parser, $tagName, $attrs) { 

 // The function used when an element is encountered 

  global $insideitem, $tag; 

 if ($insideitem) { 

 $tag = $tagName; 

 } elseif ($tagName == "ITEM") { 

 $insideitem = true; 
 } 

 } 

 function characterData2($parser, $data) { 

 // The function used to parse all other data than tags 

  global $insideitem, $tag, $title, $date, $description, $link, $catagory; 
  
  if ($insideitem) { 
  
  switch ($tag) { 
  case "TITLE": 
 $title .= $data; 
 break; 
 case "DESCRIPTION": 
 $description .= $data; 
 break; 
 case "LINK": 
 $link .= $data; 
 break; 
 case "CATAGORY": 
 $catagory .= $data; 
 break; 
 case "DC:DATE": 
 $date .= $data; 
 break; 
 } 

 } 

 } 

 function endElement2($parser, $tagName) { 

 // This function is used when an end-tag is encountered. 

 global $insideitem, $tag, $title, $date, $description, $link, $catagory; 
  
 if ($tagName == "ITEM") { 
 //print_r($date);
 printf("<b><a href='%s' target='_blank'>%s</a></b><br>", 
 trim($link),htmlspecialchars(trim($title))); 
 printf("%s<br>",htmlspecialchars(trim($date)));
 printf("%s<br><br>",htmlspecialchars(trim($description))); 
 $title = $date = $description = $link = $insideitem = $catagory = false;  

 } 

 } 

 // Now to the parsing itself. Starts by creating it: 

 $xml_parser = xml_parser_create(); 

 // Then setup the handlers: 
 // CHange the Functions to match the new ones above 

 xml_set_element_handler($xml_parser, "startElement2", "endElement2"); 
 xml_set_character_data_handler($xml_parser, "characterData2"); 

 // Open the actual datafile: 
 $fp = fopen($backend2, r); 

 // Run through it line by line and parse: 
 while ($data = fread($fp, 4096)) { 
 xml_parse($xml_parser, $data, feof($fp)) 
 or die(sprintf("XML error: %s at line %d", 
 xml_error_string(xml_get_error_code($xml_parser)), 
 xml_get_current_line_number($xml_parser))); 
 } 

 // Close the datafile 
 fclose($fp); 

 // Free any memmory used 
 xml_parser_free($xml_parser); 

 ?> 

Posted: Tue 11. Oct 2005, 18:58
by pico
warum verwendest du den RSS-Parser von phpWCMS nicht ?

Posted: Thu 13. Oct 2005, 16:44
by Chilly_Bang
@pico

weil:

1. rss-parser von phpwcms zeigt nicht <date> und <description>. vielleicht schon - den script von phpwcms hab ich aber gar nicht probiert zu justieren. ich vermute mal, dass bei entsprechender berichtigung auch hier das auslesen von bestimmten felder klappen würde - für einen hinweis, wo die zu berichtigende datei liegt wäre ich sehr dankbar.

2. mit der deutschsprachigem Teil der Aufgabe ist auch der von mir eingesetzte Script locker fertig.

Das eigentliche Problem bereitet das news-Teil in Kyrillisch. da wird content nämlich per .js eingelesen.

was ich noch im laufe der tage festgestellt habe: mein firefox kommt mit dem russischen teil der nachrichten klar, safari und ie kapieren nicht, wie auf einer seite zwei verschieden kodierungen sein können.

ich verzweilfle langsam - die ideen sind aus.