From a4e2d49a8b4ece87c5a86aaa8e9a5adc0f42f57a Mon Sep 17 00:00:00 2001 From: Jean-Pierre Pourez <46094001+kazimentou@users.noreply.github.com> Date: Mon, 13 Apr 2020 14:54:26 +0200 Subject: [PATCH] FIX #403 Extern link in static page URL Co-authored-by: bazooka07 --- core/lib/class.plx.utils.php | 49 +++++++++++++++++++++--------------- readme/CHANGELOG | 1 + 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/core/lib/class.plx.utils.php b/core/lib/class.plx.utils.php index 431a4b103..d65556c4b 100644 --- a/core/lib/class.plx.utils.php +++ b/core/lib/class.plx.utils.php @@ -16,6 +16,12 @@ class plxUtils { + const REMOVE_WORDS = array( + 'en' => 'an?|as|at|before|but|by|for|from|is|in(?:to)?|like|off?on(?:to)?|per|since|than|the|this|that|to|up|via|with', + 'de' => 'das|der|die|fur|am', + 'fr' => 'a|de?|des|du|e?n|la|le|une?|vers' + ); + /** * Méthode qui vérifie si une variable est définie. * Renvoie la valeur de la variable ou la valeur par défaut passée en paramètre @@ -96,7 +102,7 @@ public static function checkSite(&$site, $reset=true) { # On vérifie le site via une expression régulière # Méthode imme_emosol - http://mathiasbynens.be/demo/url-regex # modifiée par Amaury Graillat pour prendre en compte les tirets dans les urls - if(preg_match('@(https?|ftp)://(-\.)?([^\s/?\.#]+\.?)+([/?][^\s]*)?$@iS', $site)) + if(preg_match('@(https?|s?ftp)://(-\.)?([^\s/?\.#]+\.?)+([/?][^\s]*)?$@iS', $site)) return true; else { if($reset) $site=''; @@ -438,7 +444,7 @@ public static function testLibXml($format="
  • #sym * @param charset charset à utiliser dans le formatage de la chaine (par défaut utf-8) * @return string chaine formatée **/ - public static function removeAccents($str,$charset='utf-8') { + public static function removeAccents($str, $charset=PLX_CHARSET) { $str = htmlentities($str, ENT_NOQUOTES, $charset); $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ', 'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', 'ŏ', 'Ő', 'ő', 'Œ', 'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', 'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', 'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', 'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ', 'Ǒ', 'ǒ', 'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ'); @@ -446,7 +452,7 @@ public static function removeAccents($str,$charset='utf-8') { $str = str_replace($a, $b, $str); $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml|uro)\;#', '\1', $str); $str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str); # pour les ligatures e.g. 'œ' - $str = preg_replace('#\&[^;]+\;#', '', $str); # supprime les autres caractères + $str = preg_replace('#\&[^;]+\;#', '', $str); # supprime les entités HTML return $str; } @@ -512,32 +518,35 @@ public static function translitterate($str, $reverse=false) { * @param boolean $remove retire les mots sans valeur sémantique * @param string $replace * @param boolean $lower - * @return string valid URL + * @return string valid URL * @author J.P. Pourrez (bazooka07) * */ - public static function urlify($str, $remove=true, $replace='-', $lower=true) { + public static function urlify($url, $remove=true, $replace='-', $lower=true) { - $remove_words = array( - 'en' => 'a|an|as|at|before|but|by|for|from|is|into|in|like|off?|on|onto|per|since|than|the|this|that|to|up|via|with', - 'de' => 'das|der|die|fur|am', - 'fr' => 'a|de?|des|du|e?n|la|le|une?|vers' - ); + $scheme = parse_url($url, PHP_URL_SCHEME); + if(!empty($scheme)) { + if($scheme == 'data') { return $url; } + + $url = substr($url, strlen($scheme) + 3); // http:// + } + $clean_url = plxUtils::translitterate(trim(html_entity_decode($url))); - $clean_str = plxUtils::translitterate(trim(html_entity_decode($str))); - - if($remove && defined('PLX_SITE_LANG') && array_key_exists(PLX_SITE_LANG, $remove_words)) { - $tmpstr = preg_replace('@\b('.$remove_words[PLX_SITE_LANG].')\b@u', $replace, $clean_str); - $clean_str = preg_replace('@\s*'.$replace.'(\s*'.$replace.')*\s*@', $replace, $tmpstr); + if($remove && defined('PLX_SITE_LANG') && array_key_exists(PLX_SITE_LANG, self::REMOVE_WORDS)) { + $clean_url = preg_replace('@\b(' . self::REMOVE_WORDS[PLX_SITE_LANG] . ')\b@u', $replace, $clean_url); } // remove accents - $clean_str = plxUtils::removeAccents($clean_str,PLX_CHARSET); + $clean_url = plxUtils::removeAccents($clean_url, PLX_CHARSET); + // remove whitespace - $clean_str = preg_replace('@\s+@',$replace,$clean_str); + $clean_url = preg_replace('@[\s' . $replace . ']+@', $replace, $clean_url); + // remove non-alphanumeric character - $clean_str = trim(preg_replace('@[^\w-]@','',$clean_str),'-'); + $clean_url = trim(preg_replace('@[^\w\.-]+@', '', $clean_url), '-'); + + if($lower) { $clean_url = strtolower($clean_url); } - return ($lower) ? strtolower($clean_str) : $clean_str; + return (empty($scheme)) ? $clean_url : $scheme . '://' . $clean_url; } /** @@ -920,7 +929,7 @@ public static function rel2abs($base, $html) { /** * Méthode qui retourne la liste des langues disponibles dans un tableau * - * @return tableau associatif + * @return array * @author J.P. Pourrez, Stephane F. **/ public static function getLangs() { diff --git a/readme/CHANGELOG b/readme/CHANGELOG index d73138131..b78f5fd1d 100644 --- a/readme/CHANGELOG +++ b/readme/CHANGELOG @@ -1,5 +1,6 @@ ## PLUXML 5.8.3 (yyyy/mm/dd) ## [+] New "rename" and "copy to clipboard" icons in medias administration page #387 (bazooka07) +FIX Fix medias administration zoombox and javascript optimisations #387 (bazooka07) FIX Headline and Tags toggles always closed in article edition #382 (sudwebdesign) FIX Error when adding or modifying a user #393 (P3ter)