Beiträge von monochromec

    Das Problem, daß Smileys nicht ersetzt werden, tritt leider auch auf, wenn Smileys direkt vor Interpunktionszeichen wie '.', ',', etc. stehen.

    Folgender Patch in der Datei functions.php (im Verzeichnis wp-includes) schafft hier Abhilfe (ab Zeile 1916 in der Version 2.6.2):

    $siteurl = get_option( 'siteurl' );
    // Capture smilies before punctuation characters as well
    foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
    // $wp_smiliessearch[] = '/(\s|^)' . preg_quote( $smiley, '/' ) . '(\s|$)/';
    $wp_smiliessearch[] = '/(\s|^)' . preg_quote( $smiley, '/' ) . '(\s|$)/';
    $smiley_masked = attribute_escape( trim( $smiley ) );
    $wp_smiliesreplace[] = " <img src='$siteurl/wp-includes/images/smilies/$img' alt='$smiley_masked' class='wp-smi\ley' />";

    durch

    // Capture smilies before punctuation characters as well
    $delim = preg_quote ('.:-),', '/');
    foreach ( (array) $wpsmiliestrans as $smiley => $img ) {
    // $wp_smiliessearch[] = '/(\s|^)' . preg_quote( $smiley, '/' ) . '(\s|$)/';
    $wp_smiliessearch[] = '/(\s|^)' . preg_quote( $smiley, '/' ) . '([' . $delim . ']|\s|$)/';
    $smiley_masked = attribute_escape( trim( $smiley ) );
    $wp_smiliesreplace[] = " <img src='$siteurl/wp-includes/images/smilies/$img' alt='$smiley_masked' class='wp-smi\ley' />" . '\2';

    ersetzen.

    Der Patch bewirkt, daß der preg_replace-Aufruf in der eigentlichen Ersetzung (formatting.php, Zeile 722) auch bei besagten Interpunktion-Zeichen greift. Wichtig hierbei ist die Backward-Reference '\2' im Replacement-String; wenn sie fehlt, wird das ursprüngliche Interpunktionszeichen aufrund des erfolgreichen Matchens unterschlagen.

    Auch in diesem Forum könnte der Patch Wunder bewirken :-).