我知道toscho不太喜欢这样,但无论如何:将输入参数转换为数组:
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\'];
}
这样就可以像这样使用它
(you possibily missed how to use arrays anyway):
$args = array(
\'string\' => \'bla\'
,\'max_chars\' => 50 // INPUT LENGTH HERE
);
echo \'<p>\' . utf8_truncate( $args ) . \'</p>\';
您还可以根据需要切换此选项:
if ( is_page() )
{
$args[\'max_chars\'] = 100;
}
elseif ( is_archive() )
{
$args[\'max_chars\'] = 50;
}
elseif ( is_whatever() )
... etc ...
}