Das Plugin Textile 2.1 on WP Plugin Directory : idly [dot] org war der Grund... Wenn man es deaktiviert, ist die Welt wieder in Ordnung...
Textile 2.1 hat wohl Encoding Probleme bei UTF-8.
Nur falls jemand sucht und das gleiche Problem hat.
Um schreiben oder kommentieren zu können, benötigen Sie ein Benutzerkonto.
Sie haben schon ein Benutzerkonto? Melden Sie sich hier an.
Jetzt anmeldenHier können Sie ein neues Benutzerkonto erstellen.
Neues Benutzerkonto erstellenDas Plugin Textile 2.1 on WP Plugin Directory : idly [dot] org war der Grund... Wenn man es deaktiviert, ist die Welt wieder in Ordnung...
Textile 2.1 hat wohl Encoding Probleme bei UTF-8.
Nur falls jemand sucht und das gleiche Problem hat.
So jetzt habe ich es verstanden!
Textile ist ja ein Plugin, das ich hinzugefügt habe *Argl*
Und das Plugin kann wohl nicht mit UTF-8 umgehen! *Grrr*
Gut... Vielleicht hilft einem das hier...
Für's Protokoll: Meine letzte Änderung an der Funktion, sah folgend aus, auf das es jemanden Helfe:
function apply_filters($tag, $string) {
global $wp_filter, $merged_filters;
if ( !isset( $merged_filters[ $tag ] ) )
merge_filters($tag);
if ( !isset($wp_filter[$tag]) )
return $string;
reset( $wp_filter[ $tag ] );
$args = func_get_args();
$mystring = "My Orig: " . $string . "<p />";
do{
foreach( (array) current($wp_filter[$tag]) as $the_ )
if ( !is_null($the_['function']) ){
if (! ($the_['function'] == "Array"))
{
$args[1] = $string;
$string = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
$mystring .= "Function ";
if (is_array($the_['function'])) {
$mystring .= "An array with " . count($the_['function']) . " elements - ";
// foreach ($the_['function'] as $myObject)
// $mystring .= $myObject->__toString() . ", ";
$mystring .= $the_['function'][1];
//$mystring .= implode ( ",", $the_['function'] );
}
$mystring .= ":" . $string . "<p />";
}
}
} while ( next($wp_filter[$tag]) );
if ($tag == "the_content")
return $mystring;
if ($tag == "the_editor_content")
return $mystring;
return $string;
}
Alles anzeigen
Grüße
Was ich gar nicht verstehe, wann und wie dies zu dem Array kommt...
Denn es ist wohl nur bei den Funktionslisten von "the_content" aber nicht bei "the_editor_content" enthalten.
Aber ich kann kein add_filter bei "the_content" finden, welches dieses definiert... Mittels grep habe ich beim View folgendes gefunden:
According filters
./wp-includes/default-filters.php:11:add_filter('the_content', 'wptexturize');
-> ./wp-includes/formatting.php:3:function wptexturize($text) {
./wp-includes/default-filters.php:121:add_filter('the_content', 'convert_smilies');
-> ./wp-includes/formatting.php:644:function convert_smilies($text) {
./wp-includes/default-filters.php:122:add_filter('the_content', 'convert_chars');
-> ./wp-includes/formatting.php:352:function convert_chars($content, $flag = 'obsolete') {
./wp-includes/default-filters.php:123:add_filter('the_content', 'wpautop');
-> ./wp-includes/formatting.php:54:function wpautop($pee, $br = 1) { ???? Do nothing? Never called?
(Not realy: ./wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js:571:function wpautop(pee) {)
./wp-includes/template-loader.php:27: add_filter('the_content', 'prepend_attachment');
./wp-includes/template-loader.php:32: add_filter('the_content', 'prepend_attachment');
./wp-includes/template-loader.php:55: add_filter('the_content', 'prepend_attachment');
-> ./wp-includes/post-template.php:447:function prepend_attachment($content) { ???? Do nothing? Never called?
Alles anzeigen
Beim Editor nur dieses:
According filters: ./wp-includes/general-template.php:834: add_filter('the_editor_content', 'wp_richedit_pre');
Wie die ersten beiden Filter inline_php und Textile2_New->do_textile bei the_conten (beim View) hinzukommen, ist mir ein absolutes Rätsel...
Mittlerweile habe ich verstanden, dass die "Funktion" Array ein Array mit zwei Elementen ist...
Ich versuche gerade vergeblich die Typen des Arrays zu erfahren...
Aber durch einen Fehler, weiß ich, dass das erste Element ein Object namens Textile2_New ist:
Und durch direkten Zugriff habe ich herausgefunden, dass der zweite Parameter ein String namens "do_textile" ist...
Ich suche Mal dort weiter...
Hilfe in dem Punkten ist mir auch sehr willkommen.
Grüße
Das Reverse-Engineering gestaltet sich mühselig...
In der Datei ./wp-includes/plugin.php habe ich die Funktion apply_filters manipuliert...
Anstatt von
function apply_filters($tag, $string) {
global $wp_filter, $merged_filters;
if ( !isset( $merged_filters[ $tag ] ) )
merge_filters($tag);
if ( !isset($wp_filter[$tag]) )
return $string;
reset( $wp_filter[ $tag ] );
$args = func_get_args();
do{
foreach( (array) current($wp_filter[$tag]) as $the_ )
if ( !is_null($the_['function']) ){
$args[1] = $string;
$string = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
}
} while ( next($wp_filter[$tag]) );
return $string;
}
Alles anzeigen
habe ich folgendes geschrieben:
function apply_filters($tag, $string) {
global $wp_filter, $merged_filters;
if ( !isset( $merged_filters[ $tag ] ) )
merge_filters($tag);
if ( !isset($wp_filter[$tag]) )
return $string;
reset( $wp_filter[ $tag ] );
$args = func_get_args();
$mystring = "My Orig: " . $string . "<p />";
do{
foreach( (array) current($wp_filter[$tag]) as $the_ )
if ( !is_null($the_['function']) ){
$args[1] = $string;
$string = call_user_func_array($the_['function'], array_slice($args, 1, (int) $the_['accepted_args']));
$mystring .= "Function " . $the_['function'] . ":" . $string . "<p />";
}
} while ( next($wp_filter[$tag]) );
if ($tag == "the_content")
return $mystring;
if ($tag == "the_editor_content")
return $mystring;
return $string;
}
Alles anzeigen
Dann wird folgendes ausgegeben:
My Orig: München
Function inline_php:München
Function Array:
München
Function convert_smilies:
München
Function convert_chars:
München
Der Fehler tritt wohl bei Array auf...
Im Vergleich beim Editor:
Kein Array, kein Fehler...
Ich bohre tiefer...
Es scheint wirklich ein Bug zu sein.
Während beim Editmodus irgendwann in der Datei ./wp-includes/general-template.php Zeile 893 folgendes aufgerufen wird:
Wird beim Anzeigen irgendwann in der Datei ./wp-includes/post-template.php Zeile 55 dieser Code ausgeführt:
Kommentiert man dieses Zeile aus... Kommen die Umlaute auch an... Bei UTF-8. Genauso bei einer Änderung zu "the_editor_content"...
Das deutet definitiv darauf hin, dass dort der Bug ist...
Leider gehen dann auch Umbrüche verloren, dass Zeilenumbrüche nicht in BR-Tag umgewandelt werden.
Ich bohre Mal tiefer...
Nachtrag:
Ich habe ein paar Tests gemacht (ich gebe München ein):
* Firefox im Visualmode:Gleiches Problem. Im HTML steht dann beim Anzeigen folgendes(unterstriche wegdenken!):
* Firefox im Codemode: genau dasselbe
* Konqueror (gibt nur Codemode): genau dasselbe
Es ist wohl so, dass nicht nur die falschen Zeichen dargestellt werden, sondern der auch noch falsche HTML-Tags gebaut werden.
Ich kann mir das so erklären: UTF-COde ist in der DB, wird ausgelesen und beim Darstellen, gibt es eines der Encoding Probleme, dann ist es kein UTF-8 sondern ASCII oder Server-Standard-Encoding. Dieser String wird dann in HTML-Tag umgewandelt, wobei der beiden Bytes, die eigentlich zusammen ein UTF-8-Zeichen darstellen (hier ü), dann escaped werden.
Das schaut mir nach einem Bug aus.
Ich verwende WordPress 2.2.1 (die deutsch-sprachige Version).
Umlaute-Problem, die viele / UTF-8 / Textile 2.1 (s.u.) / gelöst
Das Problem ist gelöst, siehe: http://forum.wordpress-deutschland.org/konfiguration/…html#post113219
--
Original Posting:
Hi!
Viele haben wohl ein Umlaut Problem... Ich auch...
Folgende Tipps habe ich ausprobiert
* WordPress › Support » Strange character at the beginning of a page...
* WordPress Deutschland FAQ » Warum bekomme ich zerstückelte Sonderzeichen angezeigt?
Es ist immer das gleiche:
Wenn ich UFT-8 einstelle, dann bekomme ich die rümlichen Zeichen... Aber nur dann im Blog... Im Editor ist es richtig!
Wenn ich ANSI oder iso-8859-1 einstelle, dann wird alles im Text nach dem Umlaut abgeschnitten, nachdem ich es abgespeichert habe.
Ich wäre sehr dankbar, wüsste jemand Rat...
Grüße