Nochmal: Was passiert, wenn du den Browser zwingst UTF-8 zu verwenden? Wird es dann richtig dargestellt?
str_replace-Problem
Einklappen
X
-
Nein, habe ich doch geschrieben. Der Browser ist ohnehin so eingestellt gewesen.Zitat von h3ll Beitrag anzeigenNochmal: Was passiert, wenn du den Browser zwingst UTF-8 zu verwenden? Wird es dann richtig dargestellt?
Kommentar
-
Also, ich hatte ja die Testdateien im Editor vor dem Speichern zu UTF-8 konvertiert. Wenn ich die jetzt aber in meinem uralten Weberslave öffne, der das noch nicht richtig versteht, dann erhalte ich diese Reihenfolge:
Die erste Zeile sollte somit die Zeichen enthalten, nach denen Du suchen müsstest, um diese beiden zu bereinigen.HTML-Code:// Ausgabe: ‘Door’ // Ausgabe: ‘Door’ // Ausgabe: ?Door?
Kommentar
-
Er muss nix bereinigen. Wenn er jetzt anfängt einzelne Zeichen zu ersetzen, ist das ein schmutziger Workaround, der vielleicht in 90% der Fälle funktioniert, aber es behebt das eigentliche Problem nicht.Zitat von Melewo Beitrag anzeigenDie erste Zeile sollte somit die Zeichen enthalten, nach denen Du suchen müsstest, um diese beiden zu bereinigen.
Das wäre etwa so, als hättest du einen Taschenrechner, der bei 2+2 eine 5 als Ergebnis liefert. Jetzt könnte man natürlich hergehen und den Fehler "korrigieren", indem man 5 durch 4 ersetzt. "Funktioniert" auch im ersten Anschein nach einwandfrei. Bis jemand auf die Idee kommt 2+3 zu rechnen und plötzlich 4 als Ergebnis bekommt.
Also nicht das Ergebnis der Verarbeitung korrigieren, sondern die eigentliche Verarbeitung! Das gilt auch bei Zeichensätzen.Zuletzt geändert von h3ll; 11.01.2013, 22:27.
Kommentar
-
Ja, ist richtig. Kommt aber immer auf den Verwendungszweck an. Hatte mal eine kleine Suche gebastelt, die UTF-8 und ISO Dateien durchsuchen sollte, da funktionierte das mit diesen Glyphen ganz gut, nur genügten da halt die Entsprechungen für Umlaute.Zitat von h3ll Beitrag anzeigenEr muss nix bereinigen. Wenn er jetzt anfängt einzelne Zeichen zu ersetzen, ist das ein schmutziger Workaround, der vielleicht in 90% der Fälle funktioniert, aber es behebt das eigentliche Problem nicht.
Hier ist noch eine passende Glyphen-Liste, nur ist die nicht komplett. Um den Buchstaben zu erhalten, müsste nach dem zweiten Buchstaben oder Glyphe (nennt man das so?) gesucht werden.
http://bueltge.de/wp-content/downloa...odierungen.pdfZuletzt geändert von Melewo; 11.01.2013, 22:42.
Kommentar
-
Das ist gut gemeint, aber diese Liste ist voll daneben und verleitet dazu, alles nur noch schlimmer zu machen. Denn auch wenn 2-Byte-Sequenzen in unseren Breiten besonders häufig anzutreffen sind, darf man nicht vergessen, dass es auch 3- und 4-Byte-Sequenzen in UTF-8 gibt. Daneben gibt es aber auch noch die nicht-kanonischen Formen (z. B. Buchstabe und kombinierendes diakritisches Zeichen), die das ganze nur noch verwirrender machen.Zitat von Melewo Beitrag anzeigenHier ist noch eine passende Glyphen-Liste, nur ist die nicht komplett. Um den Buchstaben zu erhalten, müsste nach dem zweiten Buchstaben oder Glyphe (nennt man das so?) gesucht werden.
http://bueltge.de/wp-content/downloa...odierungen.pdf
Dein Satz müsste also richtig lauten: „Um die Glyphe zu erhalten, müsste nach dem zweiten (und ggf. dritten und vierten) Byte gesucht und eventuelle Kombinationsmarker berücksichtigt werden.“
Deswegen sollte man sich an das halten, was h3ll die ganze Zeit schon predigt.[COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
[/COLOR]
Kommentar
-
Ist doch vollkommen richtig, bestreite ich doch nicht. Bei mir klappt es doch auch. Habe mir heute nur mal die eine Artikelseite geholt, weil ich da nicht alles scrapen wollte, ohne User Agent erhalte ich gleich einen 500er und je nach dem was ich als Zeichensatz verwende, diese Ausgaben:Zitat von AmicaNoctis Beitrag anzeigenund verleitet dazu, alles nur noch schlimmer zu machen.
PHP-Code:<?php ini_set("user_agent", "Mozilla/5.0 ..."); ?>
<!DOCTYPE html>
<html>
<head>
<title>Thema</title>
<meta charset="utf-8">
</head>
<body>
<?php
$String = file_get_contents("http://www. ... .com/door-mystery-erupts-...");
echo htmlspecialchars($String, ENT_QUOTES);
// <title> POLITICS - ‘Door’ mystery ...
?>
</body>
</html>Und somit scheint da etwas beim Script mit dem verwendeten Zeichensatz nicht richtig zu stimmen oder wie auch immer. Schrieb ja nur, dass es Anwendungsfälle gibt, wo diese ganz brauchbar sind.PHP-Code:<?php ini_set("user_agent", "Mozilla/5.0 ..."); ?>
<!DOCTYPE html>
<html>
<head>
<title>Thema</title>
<meta charset="windows-1252">
</head>
<body>
<?php
$String = file_get_contents("http://www. ... .com/door-mystery-erupts-...");
echo htmlspecialchars($String, ENT_QUOTES);
// <title> POLITICS - ‘Door’ mystery ...
?>
</body>
</html>
@ newbie1955 - Mit der rechtlichen Seite und mit dem neuen Leistungsschutzgesetz kennst Du Dich hoffentlich aus? Dass seit Jahren keine Seite mehr in den Serps rankt, die nur zu 100% aus übernommenen Pressemitteilungen oder sonstigen Duplicate Content besteht, weißt Du? Die Fehler im Quelltext würde ich bereinigen und X-UA-Compatible würde ich entfernen, da nur als Notbehelf geeignet. Die Ladezeit von der Seite ist zu lang.[FONT="][/FONT]Zuletzt geändert von Melewo; 12.01.2013, 10:37.
Kommentar
-
Zeichensatz beachten
Hallo, nett dass Ihr mir helfen wollt, aber ich habe das newbie in meinem Namen nicht ohne Grund gewählt, also versucht bitte, wenn möglich, verständlich zu bleiben.
@AmicaNoctis und h3llLeider weiß ich nicht, was Ihr damit meint. Inwieweit beachten, wodurch ??? Ich habe doch jeweils auf Deine Detailvorschläge "Browser zu utf-8 zwingen" usw. geantwortet, ohne dass ich irgendwo gelesen hätte: Mache es so! Also, ich soll nicht mit str_replace einzelne Zeichen ersetzen, habe ich kapiert. Ich habe im header - vor allen Ausgaben - per php utf-8 gesetzt, also WO oder wodurch habe ich den Zeichensatz nicht beachtet?Man hätte auch einfach nur den Zeichensatz beachten können. Aber hey, wozu einfach, wenns auch umständlich geht...
@Melewo. Ja, die rechtliche Seite wird beachtet. Diese Seite soll - wenn sie je funktioniert - sowieso vor allem intern verwendet werden und wird ggf mit htaccess geschützt.Zuletzt geändert von newbie1955; 12.01.2013, 16:23.
Kommentar
-
Die Antwort hatte ich auf meine Antwort bezogen, weil ich es halt auch so handhabe, wenn ein Script UTF-8 und ISO Dateien in einem Abwasch durchsuchen soll. In der Funktion habe ich aber nur die Glyphen und Entities für Umlaute aufgenommen:Zitat von newbie1955 Beitrag anzeigenLeider weiß ich nicht, was Ihr damit meint. Inwieweit beachten, wodurch ?
RegEx: Mit regulären Ausdrücken im Quellcode von Dateien suchen
Hat jetzt nicht unbedingt etwas mit dem Thema zu tun, doch zum Beispiel verstehe ich nicht, zu was dieser Refresh gut sein soll. Wenn Du da schon aus einem mir unerklärlichen Grund einen verwendest, zwischen http: und Domain kommen immer noch zwei Schrägstriche:
Doch wozu, damit die Seite sich aktualisieren soll? Die hat doch so schon eine zu lange Ladezeit. Besser wäre es da, Du würdest die Ergebnisse stündlich oder mehrmals täglich cachen und für den Aufbau der Seiten dann nur die gecachten Daten verwenden.HTML-Code:<meta http-equiv="refresh" content="600; URL=http:www.nachrichtentisch.de/austest.php">
Daraus lässt sich 0 machen, da es sich ohnehin oft nur um Wiederholungen handelt, wie fehlende Anführungszeichen:
Und wenn Script und HTML aufgeräumt ist, vielleicht lassen sich dann die verbleibenden Fehler besser eingrenzen oder verschwinden mit der Aufräumaktion. Im Augenblick fallen mir keine fehlerhaften Zeichen auf.Result: 460 Fehler / 37 Warnungen
Kommentar
-
ja. Momentan sehe ich auch nix Störendes, aber auch keine spezifischenZitat von h3ll Beitrag anzeigenHast du jetzt das htmlentities() schon raus gegeben?
türkischen Sonderzeichen, die im aktuellen Text gerade vorkämen.
War es denn das, was Du meintest mit "einfach nur den Zeichensatz beachten"???
Kommentar
-
Nein. htmlentities() ist in 99,9999% der Fälle unnötig und richtet falsch angewandt mehr Schaden an, als es überhaupt bringt. Bei dir wars vermutlich, dass du die Kodierung mit 'utf-8' statt mit 'UTF-8' angegeben hast. Aber wie gesagt, das ist so oder so hinfällig, weil die Funktion hier wertlos ist.Zitat von newbie1955 Beitrag anzeigenja. Momentan sehe ich auch nix Störendes, aber auch keine spezifischen
türkischen Sonderzeichen, die im aktuellen Text gerade vorkämen.
War es denn das, was Du meintest mit "einfach nur den Zeichensatz beachten"???
Allerdings solltest du immer htmlspecialchars() anwenden, wenn du auf deiner HTML-Seite Werte ausgeben möchtest, da hiermit HTML-Steuerzeichen entschärft werden. Einziger Ausnahmefall: Du möchtest bewusst HTML-Code ausgeben.
Kommentar
-
@Melewo
Für meine Arbeit sollte sich die Meldungsübersicht in kürzeren Zeiträumen aktualisieren, also spätestens alle fünf Minuten. Das mit dem doppelten Slash ist natürlich ein Fehler, den hatte ich jetzt schon wieder entfernt.
Woher kommen die vielen Fehler bei Dir? Bei mir kommen:
Und mit deren Behebung tue ich mich schwer, da ich sie nicht verstehe:Code:Result: 4 Errors, 2 warning(s)
Die lange Ladezeit verstehe ich auch nicht recht, ich habe ja noch andere Unterseiten, die schneller geladen werden. Allerdings kostet das Abrufen diverser feeds wohl immer recht viel Zeit. Ich wollte hier schon mal in einem anderen Thread fragen, ob jemand Ideen fürs schnellere Laden hat. (Zum Beispiel die Seite in zwei Teile aufteilen, die nacheinander geladen werden?)Code:[LIST=1][*] [IMG]http://validator.w3.org/images/info_icons/error.png[/IMG] [I]Line [URL="http://validator.w3.org/check#line-7"]7[/URL], Column 97[/I]: Bad value [URL]http://www.w3.org/2000/xhtml[/URL] for the attribute xmlns (only [URL="http://www.w3.org/1999/xhtml"]XHTML namespace[/URL] permitted here). …l lang="de" class="no-js" xmlns="http://www.w3.org/2000/xhtml"[B]>[/B]<!--<![endif]--> [URL="http://validator.w3.org/feedback.html?uri=;errmsg_id=html5#errormsg"]✉[/URL][*] [IMG]http://validator.w3.org/images/info_icons/warning.png[/IMG] [I]Line [URL="http://validator.w3.org/check#line-7"]7[/URL], Column 97[/I]: Attribute xmlns is not serializable as XML 1.0. …l lang="de" class="no-js" xmlns="http://www.w3.org/2000/xhtml"[B]>[/B]<!--<![endif]--> [URL="http://validator.w3.org/feedback.html?uri=;errmsg_id=html5#errormsg"]✉[/URL][*] [IMG]http://validator.w3.org/images/info_icons/error.png[/IMG] [I]Line [URL="http://validator.w3.org/check#line-12"]12[/URL], Column 53[/I]: Bad value X-UA-Compatible for attribute http-equiv on element meta. <meta http-equiv="X-UA-Compatible" content="IE=8" /[B]>[/B] [URL="http://validator.w3.org/feedback.html?uri=;errmsg_id=html5#errormsg"]✉[/URL][*] [IMG]http://validator.w3.org/images/info_icons/error.png[/IMG] [I]Line [URL="http://validator.w3.org/check#line-17"]17[/URL], Column 68[/I]: Changing character encoding utf-8 and reparsing. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/[B]>[/B] [URL="http://validator.w3.org/feedback.html?uri=;errmsg_id=html5#errormsg"]✉[/URL][*] [IMG]http://validator.w3.org/images/info_icons/error.png[/IMG] [I]Line [URL="http://validator.w3.org/check#line-17"]17[/URL], Column 68[/I]: Changing encoding at this point would need non-streamable behavior. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/[B]>[/B] [URL="http://validator.w3.org/feedback.html?uri=;errmsg_id=html5#errormsg"]✉[/URL][/LIST]
Wenn ich X-UA-Compatible entferne, kriege ich hier mit der IE-Darstellung Probleme. Wir haben hier auf der Arbeit noch grottig alte IEs im Einsatz, da zerschießt es mir die Navi-Leiste.
Gruß und Dank
newbie1955Zuletzt geändert von newbie1955; 12.01.2013, 18:41.
Kommentar
Moderatorin
Kommentar