it-swarm.com.de

Kürzung unterschiedlicher Informationslängen

Mir wurde vor kurzem mit einer Form des benutzerdefinierten Abschneidens von Toscho bei diesem Beitrag geholfen, es funktioniert sehr gut, aber ich finde dass ich mehrere Längenvariationen für verschiedene Teile des Inhalts erstellen muss. Zum Beispiel brauche ich auf meiner Support-Seite 80 max_chars gegenüber meiner Homepage, wofür ich 200 max_chars benötige.

Ich habe versucht, eine zweite Instanz dieser Funktion hinzuzufügen, aber es ist nicht überraschend, dass dadurch andere Aspekte meiner Website vollständig zerstört wurden.

Wie immer wäre jede Hilfe dankbar. Danke Leute!

function utf8_truncate( $string, $max_chars = 200, $append = "\xC2\xA0…" )
{
    $string = strip_tags( $string );
    $string = html_entity_decode( $string, ENT_QUOTES, 'utf-8' );
    // \xC2\xA0 is the no-break space
    $string = trim( $string, "\n\r\t .-;–,—\xC2\xA0" );
    $length = strlen( utf8_decode( $string ) );

    // Nothing to do.
    if ( $length < $max_chars )
    {
        return $string;
    }

    // mb_substr() is in /wp-includes/compat.php as a fallback if
    // your the current PHP installation doesn't have it.
    $string = mb_substr( $string, 0, $max_chars, 'utf-8' );

    // No white space. One long Word or chinese/korean/japanese text.
    if ( FALSE === strpos( $string, ' ' ) )
    {
        return $string . $append;
    }

    // Avoid breaks within words. Find the last white space.
    if ( extension_loaded( 'mbstring' ) )
    {
        $pos   = mb_strrpos( $string, ' ', 'utf-8' );
        $short = mb_substr( $string, 0, $pos, 'utf-8' );
    }
    else
    {
        // Workaround. May be slow on long strings.
        $words = explode( ' ', $string );
        // Drop the last Word.
        array_pop( $words );
        $short = implode( ' ', $words );
    }

    return $short . $append;
}
1

Ich weiß, dass toscho das nicht besonders mag, aber trotzdem: Konvertiert die Eingabeargs in ein Array:

function utf8_truncate( $args = array( 'string' => null, 'max_chars' => 200, 'append' => "\xC2\xA0…" ) )
{
    $args['string'] = strip_tags( $args['string'] );
    $args['string'] = html_entity_decode( $args['string'], ENT_QUOTES, 'utf-8' );
    // \xC2\xA0 is the no-break space
    $args['string'] = trim( $args['string'], "\n\r\t .-;–,—\xC2\xA0" );
    $length = strlen( utf8_decode( $args['string'] ) );

    // Nothing to do.
    if ( $length < $args['max_chars'] )
    {
        return $args['string'];
    }

    // mb_substr() is in /wp-includes/compat.php as a fallback if
    // your the current PHP installation doesn't have it.
    $args['string'] = mb_substr( $args['string'], 0, $args['max_chars'], 'utf-8' );

    // No white space. One long Word or chinese/korean/japanese text.
    if ( FALSE === strpos( $args['string'], ' ' ) )
    {
        return $args['string'] . $args['append'];
    }

    // Avoid breaks within words. Find the last white space.
    if ( extension_loaded( 'mbstring' ) )
    {
        $pos   = mb_strrpos( $args['string'], ' ', 'utf-8' );
        $short = mb_substr( $args['string'], 0, $pos, 'utf-8' );
    }
    else
    {
        // Workaround. May be slow on long strings.
        $words = explode( ' ', $args['string'] );
        // Drop the last Word.
        array_pop( $words );
        $short = implode( ' ', $words );
    }

    return $short . $args['append'];
}

Dies ermöglicht die Verwendung wie folgt (möglicherweise haben Sie die Verwendung von Arrays ohnehin verpasst) :

$args = array(
     'string' => 'bla'
    ,'max_chars' => 50 // INPUT LENGTH HERE
);
echo '<p>' . utf8_truncate( $args ) . '</p>';

Sie können dies auch bei Bedarf umschalten:

if ( is_page() )
{
    $args['max_chars'] = 100;
}
elseif ( is_archive() )
{
    $args['max_chars'] = 50;
}
elseif ( is_whatever() )
    ... etc ...
}
1
kaiser