From 78b585135fc16c268a9de69a1156231873995a49 Mon Sep 17 00:00:00 2001 From: Jason Oster Date: Wed, 20 May 2009 17:10:09 +0000 Subject: Force makeTitle() to limit the amount of text put into a title --- functions/date_functions.php | 6 +++--- functions/init/sanitize.php | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/functions/date_functions.php b/functions/date_functions.php index 3d55d7b..d722c17 100644 --- a/functions/date_functions.php +++ b/functions/date_functions.php @@ -163,7 +163,7 @@ function chooseOffset($time, $timezone = '') { function makeTitle($arr, $time) { global $timeFormat, $dateFormat_week; - $event_text = stripslashes(urldecode($arr["event_text"])); + $event_text = chopToWordCount(sanitizeForWeb(urldecode($arr["event_text"])), 25); if ($time == -1) { $start = localizeDate($dateFormat_week, $arr['start_unixtime']); $end = localizeDate($dateFormat_week, ($arr['end_unixtime'] - 60)); @@ -177,10 +177,10 @@ function makeTitle($arr, $time) { } if (!empty($arr['description'])) { - $title .= "\n\nDescription: ".urldecode($arr['description']); + $title .= "\n\nDescription: " . chopToWordCount(sanitizeForWeb(urldecode($arr['description'])), 100); } if (!empty($arr['location'])) { - $title .= "\n\nLocation: ".urldecode($arr['location']); + $title .= "\n\nLocation: " . chopToWordCount(sanitizeForWeb(urldecode($arr['location'])), 25); } $title = trim($title); diff --git a/functions/init/sanitize.php b/functions/init/sanitize.php index 5e9d57e..0370f9f 100644 --- a/functions/init/sanitize.php +++ b/functions/init/sanitize.php @@ -33,6 +33,23 @@ function recursiveSanitize($value) { } +/** + * Truncate a string to a specific number of words + */ +function chopToWordCount($string, $count) { + $wc = str_word_count($string); + if ($wc > $count) { + $words = str_word_count($string, 2); + $last_word = array_slice($words, $count, 1, true); + $pos = key($last_word); + $string = substr($string, 0, $pos); + } + return $string; +} + +/** + * Strip "dangerous" HTML to make it safe to print to web browsers + */ function sanitizeForWeb($string) { $string = preg_replace('//', "\n", $string); -- cgit v1.2.3