From 4fdd906b818c756e1bca8d3fb7327de85ae098f6 Mon Sep 17 00:00:00 2001 From: Jacek Pyziak Date: Sun, 18 May 2025 10:00:58 +0200 Subject: [PATCH] Enhance SEO function to improve string sanitization and formatting --- autoload/class.S.php | 49 ++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/autoload/class.S.php b/autoload/class.S.php index 56ff279..acae155 100644 --- a/autoload/class.S.php +++ b/autoload/class.S.php @@ -997,28 +997,51 @@ class S fclose( $fp ); } - public static function seo( $val, $delete_rhombs = false ) + public static function seo($val, $delete_rhombs = false) { - $val = preg_replace( '/\xc2\xa0/', ' ', $val ); + // Zamiana niełamiącej spacji na zwykłą + $val = preg_replace('/\xc2\xa0/', ' ', $val); - $array_rep1 = array( '*', '_', ' ', '+', '"', "'", '?', '-', ',', '!', '~', '<', '>', '@', '#', '$', '%', '^', '&', '*' . '(', ')' . '-', '=', '\\', '|', '[', ']', ':', '(', ')', '–', '•', ' ' ); - $array_rep2 = array( '-', '-', '-', '-', '', '', '', '-', '-', '', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '' ); + // Podstawowe zamiany znaków specjalnych + $array_rep1 = array( + '*', '_', ' ', '+', '"', "'", '?', '-', ',', '!', '~', '<', '>', '@', '#', + '$', '%', '^', '&', '*', '(', ')', '-', '=', '\\', '|', '[', ']', ':', '(', ')', + '–', '•', ' ' + ); + $array_rep2 = array( + '-', '-', '-', '-', '', '', '', '-', '-', '', '-', '-', '-', '-', '-', '-', + '-', '-', '-', '-', '-', '', '-', '-', '-', '-', '-', '-', '-', '-', '-', '', '' + ); - $val = \front\factory\Globelus::noPl( $val ); - $val = str_replace( $array_rep1, $array_rep2, $val ); + // Usuwanie polskich znaków + $val = \front\factory\Globelus::noPl($val); - if ( $delete_rhombs ) - $val = str_replace( '/', '', $val ); + // Zamiana popularnych znaków na myślniki lub pusty ciąg + $val = str_replace($array_rep1, $array_rep2, $val); - $val = strtolower( $val ); - $val = preg_replace( '/(-){2,}/', '-', $val ); + // Opcjonalne usunięcie ukośników + if ($delete_rhombs) { + $val = str_replace('/', '', $val); + } - $val = ltrim( $val, '-' ); - $val = rtrim( $val, '-' ); + // Usunięcie wszystkich znaków poza literami, cyframi i myślnikami + // (np. emotki, inne znaki Unicode, itd.) + $val = preg_replace('/[^a-zA-Z0-9\-]/u', '', $val); - return $val; + // Konwersja na małe litery + $val = strtolower($val); + + // Redukcja wielokrotnych myślników do jednego + $val = preg_replace('/(-){2,}/', '-', $val); + + // Usunięcie myślników z początku i końca + $val = ltrim($val, '-'); + $val = rtrim($val, '-'); + + return $val; } + public static function noPL( $val ) { $table = array(