diff --git a/src/block/posts/index.php b/src/block/posts/index.php index dffd2d997b..a2a4aebbeb 100644 --- a/src/block/posts/index.php +++ b/src/block/posts/index.php @@ -108,14 +108,25 @@ function generate_render_item_from_stackable_posts_block( $post, $attributes, $t // Trim the excerpt. if ( ! empty( $excerpt ) ) { + $untrimmed_excerpt = $excerpt; $excerpt = explode( ' ', $excerpt ); $trim_to_length = (int) $excerpt_length; - if ( count( $excerpt ) > $trim_to_length ) { + // Check if there are CJK characters. + if ( function_exists( 'mb_substr' ) && preg_match_all( "/\p{Han}+/u", $untrimmed_excerpt, $matches ) ) { + // Remove the
tags. + $untrimmed_excerpt = substr( $untrimmed_excerpt, 3, strlen( $untrimmed_excerpt ) - 8 ); + + if ( strlen( $untrimmed_excerpt ) > $trim_to_length ) { + // Trim according to string length. + $excerpt = mb_substr( $untrimmed_excerpt, 0, $trim_to_length ) . '...'; + } else { + $excerpt = $untrimmed_excerpt; + } + } elseif ( count( $excerpt ) > $trim_to_length ) { $excerpt = implode( ' ', array_slice( $excerpt, 0, $trim_to_length ) ) . '...'; } else { - $excerpt = implode( ' ', $excerpt ); + $excerpt = $untrimmed_excerpt; } - $excerpt = wp_kses_post( $excerpt ); $new_template = str_replace( '!#excerpt!#', $excerpt, $new_template ); } else { diff --git a/src/block/posts/util.js b/src/block/posts/util.js index 4b7e954329..ea4fd76513 100644 --- a/src/block/posts/util.js +++ b/src/block/posts/util.js @@ -199,7 +199,20 @@ export const generateRenderPostItem = attributes => { // Trim the excerpt. let excerptString = postExcerptStackable.split( ' ' ) - if ( excerptString.length > ( excerptLength || 55 ) ) { + + //Checks if there are CJK characters present. + const regexCJK = /[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/ + + if ( postExcerptStackable.match( regexCJK ) ) { + // Remove the
tags. + const tempExcerptString = postExcerptStackable.substring( 3, postExcerptStackable.length - 5 ) + + if ( tempExcerptString.length > ( excerptLength || 55 ) ) { + excerptString = tempExcerptString.substring( 0, excerptLength === '' ? 55 : excerptLength ) + '...' + } else { + excerptString = tempExcerptString + } + } else if ( excerptString.length > ( excerptLength || 55 ) ) { excerptString = excerptString.slice( 0, excerptLength || 55 ).join( ' ' ) + '...' } else { excerptString = post.post_excerpt_stackable