Page 1 of 1

Zeichenkodierung Javascript nicht utf-8

Posted: Sun 9. Sep 2007, 16:08
by osswood
Hallo zusammen,
habe ein javascript eingebunden, das offensichtlich in ISO-8859-1 codiert ist. Das Script sieht folgendermaßen aus:

Code: Select all

<script language="JavaScript" type="text/javascript" 
src="http://www.fussballportal.de/c4u_tab_small.php?liga_id=10&link_font_size=12pt&text_color=37566c&link_color=ffffff&cols_back1=37566C&cols_back2=6D8EAF"> </script>
Es bindet von Fussballportal.de die aktuelle Tabelle der 1. Bundesliga in die Seite ein.
Da ich aber standardmäßig utf-8 eingestellt habe, werden die Umlaute und andere Sonderzeichen nicht korrekt dargestellt. Stell man die Codierung im Browser auf 8859-1 um, klappt das zwar gut, aber die Sonderzeichen der restlichen Seite werden dann nicht mehr richtig dargestellt.
Frage:
Gibt es eine Möglichkeit die Zeichenkodierung nur für dieses Script z.B. via php zu ändern?
Gruß und Thnx
osswood

Posted: Mon 10. Sep 2007, 08:18
by flip-flop
Hallo,

du könntest eine eigene kleine statische Seite erstellen für dieses JS und dann in einem I-Frame starten.

Oder du stellst deine DB auf latin1 und latin1_german1_ci / latin1_swedish_ci um. -> collation umstellen
Unterstützend dazu: MySql charset

Die Methode ist abhängig vom bisherigen Umfang deiner Seite.

Ich verstehe überhaupt nicht, weshalb im deutschsprachigen Raum eine Installation mit utf8 angelegt wird. :?:

Knut

UTF-8

Posted: Fri 12. Oct 2007, 10:01
by osswood
Hallo nochmal,

nachdem ich die Zeichencodierung der DB umgestellt hatte, hat es mir das komplette Layout zerbröselt und es wäre sehr aufwändig gewesen, das alles von Hand nachzupflegen.
Ich hab dann alles wieder zurückgesetzt und für die Scripte eigene Html-Seiten erstellt, die ich dann in einem IFrame eingebunden habe.

Das funktioniert prima...
Vielen Dank für den Tip,

Gruß
Osswood

Posted: Fri 12. Oct 2007, 11:02
by flip-flop
Du darfst bei einer fortgeschrittenen Seite nicht das charset der DB wechseln. (Seite muss danach händisch korrigiert werden oder der SQL-Dump in einem Editor)
Deshalb
Die Methode ist abhängig vom bisherigen Umfang deiner Seite.
Dachte das war klar.

Knut :D

Posted: Sat 13. Oct 2007, 09:02
by Oliver Georgi
Informiere den Anbieter dieses "Scriptes" - das was er da liefert ist Unsinn. So darf das nie ungefragt in deine Seite geschrieben werden.

Ich habe selten so ein unüberlegtes Konstrukt gesehen. Der zurückgelieferte Inhalt ist nicht valide. Außerdem handelt es sich um eine vollständige HTML-Datei mit <html> und <body> Tag. Ich weiß nicht, was jemand damit bezweckt.

Wenn Du das wirklich einbetten möchtest, würde ich an Deiner Stelle einen Wrapper schreiben (habe ich mal schnell gemacht), der den Müllcode rausfiltert.

Code: Select all

<?php

$fussball = @file_get_contents('http://www.fussballportal.de/c4u_tab_small.php?liga_id=10');

if($fussball) {

	// OK, herausfiltern der Inhalte zwischen <body>
	list($teil1_weg, $fussball) = explode('<body>', $fussball);
	list($fussball) = explode('</body>', $fussball);

	// weg mit dem schrottigen JavaScript document.write
	$fussball = str_replace('document.write("', '', $fussball);
	$fussball = str_replace('");', '', $fussball);

	// weg mit führenden Leerzeichen
	$fussball = trim($fussball);
	
	// der Müll ist noch mal in ein unsinnige Tabelle gewrappt
	// kannst Du selbermachen mittels CSS und einem DIV
	$fussball = str_replace('</td></tr></table>', '', $fussball);
	// 1. Zeile Unsinn - raus damit
	list($teil1_weg, $fussball) = explode("\n", $fussball, 2);

	// ach so - UTF-8
	$fussball = utf8_encode($fussball);

	// so nun machen wir da mal noch ein DIV drum
	$fussball = '<div id="fussball">' . "\n" . trim($fussball) . "\n</div>";
	
	// im Content ersetzen, wenn Script in frontend_render
	$content['all'] = str_replace('{FUSSBALL}', $fussball, $content['all']);

	// oder wenn es direkt im Code ausgegeben werden soll
	// dann aber die <?php ?> durch [PHP] [/PHP] ersetzen und
	// Kommentaranstriche entfernen - und vor das obige $content['all'] die // setzen
	//echo $fussball;

}

?>
Das machst Du als eigenständiges Script in template/inc_script/frontend_render und an der Stelle im Template, an der Du das stehen haben möchtest, schreibst Du einfach nur {FUSSBALL}.

Syles einfach per CSS.

Oliver

Posted: Sat 13. Oct 2007, 13:55
by update
Vielen Dank - mit dem obigen Code und ein paar kleinen Änderungen habe ich endlich mal "gelernt", wie man den Inhalt zwischen den bodytags rausfiltern kann, gleichzeitig ein paar neue Anweisungen mitgibt und nun sind auch die errors weg von wegen doppeltem html usw :D
Hatte nämlich dieses "Problem" bei einer includierten "Fremddatei" und hatte es dann einfach so gelassen...

Super 8) :!:

Posted: Mon 15. Oct 2007, 21:28
by osswood
Jo,
das lässt sich aber auch mit strip_tag bewerkstelligen.

Dann bleibt der reine Text über, den man dann innerhalb einer Schleife mit den entsprechenden DIVs bekleiden kann..

Code: Select all

$fussball = str_replace('</td></tr></table>', '', $fussball);
Diese Zeile führt so zum kompletten Zerfall des Layouts, weshalb es meiner Meinung nach besser wäre mit strip_tag zu arbeiten und die gewünschten Tags entsprechend auszuklammern.

Aber wie sagt der Volksmund so schön:
Viele Wege führen nach Rom.

Vielen Dank für eure Hilfe,
osswood

Posted: Mon 15. Oct 2007, 23:34
by Oliver Georgi
na dann zeig mir mal strip_tag() für Deinen Fall, ohne dass Dir alles zerbröselt...

Da frage ich mich glattweg, wie Du das wieder in eine tabellarische Form bekommst - denn <table> gibt es ja nicht nur einmal.

Und warum nur stellst Du die Frage, wenn Du doch schlauer bist ;-)

Und glaube mir - ich habs für Deinen Fall getestet - sonst hätte ich es nicht gepostet.
Code:
$fussball = str_replace('</td></tr></table>', '', $fussball);

Diese Zeile führt so zum kompletten Zerfall des Layouts, weshalb es meiner Meinung nach besser wäre mit strip_tag zu arbeiten und die gewünschten Tags entsprechend auszuklammern.
Da es nur 1x vorkommt, kann auch kein Layout zerfallen. Übrig bleibt die innenliegende Tabelle.

Das, was Dir an "Layout" fehlt - mein Lieber - sind die schrottigen Inline-CSS Anweisungen.

Dafür kopiere Dir diesen Schrott hier gerne in die frontend.css und alles wird gut.

Code: Select all

document.write("<style type='text/css'>");
document.write(".c4utabs_td{font-size:8pt; font-family:Verdana; font-weight:normal; color:#000000}");
document.write(".c4utabs_mann{background-color:#F1F1F0; line-height:10pt; border-bottom-width:1px; border-bottom-color:#808080; border-bottom-style:solid; font-size:8pt; font-family:Verdana; font-weight:normal; color:#000000}");
document.write(".c4u_cols1{line-height:10pt; font-size:8pt; font-family:Verdana; font-weight:normal; color:#000000; background-color:#FFFFFF}");
document.write(".c4u_cols2{line-height:10pt; font-size:8pt; font-family:Verdana; font-weight:normal; color:#000000; background-color:#F1F1F0}");
document.write("A.c4utabs:link,A.c4utabs:visited,A.c4utabs:active{font-size:8pt; font-family:Verdana; font-weight:normal; text-decoration:none; color:#004000}");
document.write("A.c4utabs:hover{font-size:8pt; font-family:Verdana; font-weight:normal; text-decoration:underline; color:#004000}");
document.write("</style>");
Ähm - ach ja: vergiß nicht strip_tags() wegen der document.write();...

Oliver