diff --git a/source/php/Module/Posts/TemplateController/AbstractController.php b/source/php/Module/Posts/TemplateController/AbstractController.php index f0db9f8ea..fd820fecc 100644 --- a/source/php/Module/Posts/TemplateController/AbstractController.php +++ b/source/php/Module/Posts/TemplateController/AbstractController.php @@ -256,7 +256,7 @@ private function getDefaultValuesForPosts() { */ private function setPostViewData(object $post, $index = false) { - $post->excerptShort = in_array('excerpt', $this->data['posts_fields'] ?? []) ? $post->excerptShort : false; + $post->excerptShort = in_array('excerpt', $this->data['posts_fields'] ?? []) ? $this->sanitizeExcerpt($this->data['posts_display_as'] === 'news' ? $post->excerpt : $post->excerptShort) : false; $post->postTitle = in_array('title', $this->data['posts_fields'] ?? []) ? $post->getTitle() : false; $post->image = in_array('image', $this->data['posts_fields'] ?? []) ? $post->getImage() : []; $post->hasPlaceholderImage = in_array('image', $this->data['posts_fields'] ?? []) && empty($post->image) ? true : false; @@ -286,6 +286,23 @@ public function postUsesSchemaTypeEvent(object $post):bool { return $post->getSchemaProperty('@type') === 'Event'; } + /** + * Sanitize excerpt by stripping tags, normalizing whitespace, trimming, and converting newlines to
. + * + * @param string $excerpt + * + * @return string + */ + private function sanitizeExcerpt(string $excerpt) + { + $excerpt = strip_tags($excerpt); + $excerpt = preg_replace("/[\r\n]+/", "\n", $excerpt); + $excerpt = trim($excerpt); + $excerpt = nl2br($excerpt); + + return $excerpt; + } + /** * Add sticky posts data. * diff --git a/source/php/Module/Posts/views/partials/post/news-item.blade.php b/source/php/Module/Posts/views/partials/post/news-item.blade.php index decc53a0c..c96056ad8 100644 --- a/source/php/Module/Posts/views/partials/post/news-item.blade.php +++ b/source/php/Module/Posts/views/partials/post/news-item.blade.php @@ -1,6 +1,6 @@ @newsItem([ 'heading' => $post->postTitle, - 'content' => $post->excerpt, + 'content' => $post->excerptShort, 'image' => $post->image, 'date' => $showDate ? [ 'timestamp' => $post->getArchiveDateTimestamp(),