Zeichenkodierung Javascript nicht utf-8

Hier bekommst Du deutschsprachigen Support. Keine Fehlermeldungen oder Erweiterungswünsche bitte!
Post Reply
osswood
Posts: 21
Joined: Sat 21. Jul 2007, 11:51

Zeichenkodierung Javascript nicht utf-8

Post 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
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Post 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
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
osswood
Posts: 21
Joined: Sat 21. Jul 2007, 11:51

UTF-8

Post 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
User avatar
flip-flop
Moderator
Posts: 8178
Joined: Sat 21. May 2005, 21:25
Location: HAMM (Germany)
Contact:

Post 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
>> HowTo | DOCU | FAQ | TEMPLATES/DOCS << ( SITE )
User avatar
Oliver Georgi
Site Admin
Posts: 9918
Joined: Fri 3. Oct 2003, 22:22
Contact:

Post 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
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
User avatar
update
Moderator
Posts: 6455
Joined: Mon 10. Jan 2005, 17:29
Location: germany / outdoor

Post 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) :!:
osswood
Posts: 21
Joined: Sat 21. Jul 2007, 11:51

Post 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
User avatar
Oliver Georgi
Site Admin
Posts: 9918
Joined: Fri 3. Oct 2003, 22:22
Contact:

Post 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
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Систрон
Post Reply