2020-12-03 16:35:44 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**------------------------------------------------
|
|
|
|
*
|
|
|
|
* Rooty, 2018 <rooty@rooty.me>
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* This software is protected by copyright, please
|
|
|
|
* read the file COPYRIGHT.
|
|
|
|
* This program is distributed in the hope that it
|
|
|
|
* will be useful, but without any warranty; without
|
|
|
|
* even the implied warranty of merchantability or
|
|
|
|
* fitness for a particular purpose. Please
|
|
|
|
* read the file LICENCE.
|
|
|
|
*
|
|
|
|
*Fichier Chaine.php
|
|
|
|
*
|
|
|
|
*Ce fichier contient la classe Chaine
|
|
|
|
*<BR>
|
|
|
|
* @author Rooty <www.rooty.me|rooty@rooty.me>
|
|
|
|
* @link www.rooty.me
|
|
|
|
* @since 2004/04/09
|
|
|
|
* @version 0.3
|
|
|
|
* @copyright Copyright © 2009-2018, Rooty
|
|
|
|
* @package system_utils
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Classe Chaine
|
|
|
|
*
|
|
|
|
* Permet la gestion de chaines
|
|
|
|
* @package system_utils
|
|
|
|
*/
|
|
|
|
|
|
|
|
class Chaine
|
|
|
|
{
|
|
|
|
/**#@+
|
|
|
|
* @access public
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
* @desc contient la chaine d'origine
|
|
|
|
*/
|
|
|
|
var $src = null;
|
|
|
|
|
|
|
|
/**#@-*/
|
|
|
|
//
|
|
|
|
// Constructor
|
|
|
|
//
|
|
|
|
/**
|
|
|
|
|
|
|
|
*Constructeur de la classe Chaine
|
|
|
|
*
|
|
|
|
*<p>Initialise la donnée</p>
|
|
|
|
*
|
|
|
|
* @param chaine source de données
|
|
|
|
*/
|
|
|
|
function __construct($src)
|
|
|
|
{
|
|
|
|
$this->src=$src;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*String to html
|
|
|
|
*
|
|
|
|
*<p>Transforme une chaine de caractère au format HTML à partir de $src</p>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function strToHtml()
|
|
|
|
{
|
|
|
|
$tmp=htmlspecialchars($this->src, ENT_QUOTES);
|
|
|
|
$tmp=str_replace(chr(13).chr(10),"<br>",$tmp);
|
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*html to String
|
|
|
|
*
|
|
|
|
*<p>Transforme du code HTML en chaine de caractère à partir de $src</p>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function htmlToStr()
|
|
|
|
{
|
|
|
|
$tmp=$this->src;
|
|
|
|
$tmp=unhtmlentities($tmp);
|
|
|
|
$tmp=str_replace("<br>",chr(13).chr(10),$tmp);
|
|
|
|
//$tmp = addslashes(stripslashes($tmp));
|
|
|
|
return $tmp; // retourne une chaine
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*StrCut
|
|
|
|
*
|
|
|
|
*<p>Récupere le debut d'une chaine de caractere (nbChar)</p>
|
|
|
|
*
|
|
|
|
* @param entier nombre de caractère à récuperer
|
|
|
|
*/
|
|
|
|
function strCut($nbChar)
|
|
|
|
{
|
|
|
|
$tmp=$this->src;
|
|
|
|
# On enleve les retours à la ligne
|
|
|
|
$tmp=str_replace(chr(13).chr(10),"",$tmp);
|
|
|
|
$strlen=strlen($tmp);
|
|
|
|
# Si la taille n'est pas valide
|
|
|
|
if ($strlen>$nbChar)
|
|
|
|
{
|
|
|
|
$tmp=substr($tmp,0,$nbChar);
|
|
|
|
}
|
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*HtmlCut
|
|
|
|
*
|
|
|
|
*<p>Récupere le debut du texte d'une chaine html (nbChar)</p>
|
|
|
|
*
|
|
|
|
* @param entier nombre de caractère à récuperer
|
|
|
|
*/
|
|
|
|
function htmlCut($nbChar)
|
|
|
|
{
|
|
|
|
$tmp=$this->src;
|
|
|
|
# On enlève les espaces superflux
|
|
|
|
while (!(strpos($tmp, " ")===false))
|
|
|
|
{
|
|
|
|
$tmp=str_replace(" "," ",$tmp);
|
|
|
|
}
|
|
|
|
# on enlève les caractères spéciaux
|
|
|
|
$tmp=unhtmlentities($tmp);
|
2021-09-30 08:03:18 +02:00
|
|
|
// $tmp = mb_eregi_replace("^[[:space:]]*[a-z]+[.)".chr(176)."]([[:space:]]*)", "",$tmp);
|
2020-12-03 16:35:44 +01:00
|
|
|
# on a maintenant une chaine propre à l'utilisation...
|
|
|
|
# On enleve les retours à la ligne
|
|
|
|
$tmp=str_replace(chr(13).chr(10),"",$tmp);
|
|
|
|
|
|
|
|
$strlen=strlen($tmp);
|
|
|
|
|
|
|
|
# Si la taille n'est pas valide
|
|
|
|
if ($strlen>$nbChar)
|
|
|
|
{
|
|
|
|
$tmp=substr($tmp,0,$nbChar)." ...";
|
|
|
|
}
|
|
|
|
//$tmp = addslashes(stripslashes($tmp));
|
|
|
|
return $tmp;
|
|
|
|
}
|
2021-09-30 08:37:09 +02:00
|
|
|
|
|
|
|
function truncateHtml($length = 500, $ending = '...', $exact = false, $considerHtml = true)
|
|
|
|
{
|
|
|
|
$text=$this->src;
|
|
|
|
if ($considerHtml) {
|
|
|
|
// if the plain text is shorter than the maximum length, return the whole text
|
|
|
|
if (strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
|
|
|
|
return $text;
|
|
|
|
}
|
|
|
|
// splits all html-tags to scanable lines
|
|
|
|
preg_match_all('/(<.+?>)?([^<>]*)/s', $text, $lines, PREG_SET_ORDER);
|
|
|
|
$total_length = strlen($ending);
|
|
|
|
$open_tags = array();
|
|
|
|
$truncate = '';
|
|
|
|
foreach ($lines as $line_matchings) {
|
|
|
|
// if there is any html-tag in this line, handle it and add it (uncounted) to the output
|
|
|
|
if (!empty($line_matchings[1])) {
|
|
|
|
// if it's an "empty element" with or without xhtml-conform closing slash
|
|
|
|
if (preg_match('/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings[1])) {
|
|
|
|
// do nothing
|
|
|
|
// if tag is a closing tag
|
|
|
|
} else if (preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $line_matchings[1], $tag_matchings)) {
|
|
|
|
// delete tag from $open_tags list
|
|
|
|
$pos = array_search($tag_matchings[1], $open_tags);
|
|
|
|
if ($pos !== false) {
|
|
|
|
unset($open_tags[$pos]);
|
|
|
|
}
|
|
|
|
// if tag is an opening tag
|
|
|
|
} else if (preg_match('/^<\s*([^\s>!]+).*?>$/s', $line_matchings[1], $tag_matchings)) {
|
|
|
|
// add tag to the beginning of $open_tags list
|
|
|
|
array_unshift($open_tags, strtolower($tag_matchings[1]));
|
|
|
|
}
|
|
|
|
// add html-tag to $truncate'd text
|
|
|
|
$truncate .= $line_matchings[1];
|
|
|
|
}
|
|
|
|
// calculate the length of the plain text part of the line; handle entities as one character
|
|
|
|
$content_length = strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', ' ', $line_matchings[2]));
|
|
|
|
if ($total_length+$content_length> $length) {
|
|
|
|
// the number of characters which are left
|
|
|
|
$left = $length - $total_length;
|
|
|
|
$entities_length = 0;
|
|
|
|
// search for html entities
|
|
|
|
if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', $line_matchings[2], $entities, PREG_OFFSET_CAPTURE)) {
|
|
|
|
// calculate the real length of all entities in the legal range
|
|
|
|
foreach ($entities[0] as $entity) {
|
|
|
|
if ($entity[1]+1-$entities_length <= $left) {
|
|
|
|
$left--;
|
|
|
|
$entities_length += strlen($entity[0]);
|
|
|
|
} else {
|
|
|
|
// no more characters left
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$truncate .= substr($line_matchings[2], 0, $left+$entities_length);
|
|
|
|
// maximum lenght is reached, so get off the loop
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
$truncate .= $line_matchings[2];
|
|
|
|
$total_length += $content_length;
|
|
|
|
}
|
|
|
|
// if the maximum length is reached, get off the loop
|
|
|
|
if($total_length>= $length) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (strlen($text) <= $length) {
|
|
|
|
return $text;
|
|
|
|
} else {
|
|
|
|
$truncate = substr($text, 0, $length - strlen($ending));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// if the words shouldn't be cut in the middle...
|
|
|
|
if (!$exact) {
|
|
|
|
// ...search the last occurance of a space...
|
|
|
|
$spacepos = strrpos($truncate, ' ');
|
|
|
|
if (isset($spacepos)) {
|
|
|
|
// ...and cut the text in this position
|
|
|
|
$truncate = substr($truncate, 0, $spacepos);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// add the defined ending to the text
|
|
|
|
$truncate .= $ending;
|
|
|
|
if($considerHtml) {
|
|
|
|
// close all unclosed html-tags
|
|
|
|
foreach ($open_tags as $tag) {
|
|
|
|
$truncate .= '</' . $tag . '>';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $truncate;
|
|
|
|
}
|
2020-12-03 16:35:44 +01:00
|
|
|
|
|
|
|
function chainCut($nbChar)
|
|
|
|
{
|
|
|
|
$tmp=$this->src;
|
|
|
|
// # On enlève les espaces superflux
|
|
|
|
// while (!(strpos($tmp, " ")===false))
|
|
|
|
// {
|
|
|
|
// $tmp=str_replace(" "," ",$tmp);
|
|
|
|
// }
|
|
|
|
# on enlève les caractères spéciaux
|
2021-09-30 08:03:18 +02:00
|
|
|
$tmp=unhtmlentities($tmp);
|
|
|
|
// $tmp = mb_eregi_replace("^[[:space:]]*[a-z]+[.)".chr(176)."]([[:space:]]*)", "",$tmp);
|
2020-12-03 16:35:44 +01:00
|
|
|
# on a maintenant une chaine propre à l'utilisation...
|
|
|
|
# On enleve les retours à la ligne
|
|
|
|
$tmp=str_replace(chr(13).chr(10),"",$tmp);
|
|
|
|
|
|
|
|
$strlen=strlen($tmp);
|
|
|
|
|
|
|
|
# Si la taille n'est pas valide
|
|
|
|
if ($strlen>$nbChar)
|
|
|
|
{
|
|
|
|
$tmp=substr($tmp,0,$nbChar)." ...";
|
|
|
|
}
|
|
|
|
//$tmp = addslashes(stripslashes($tmp));
|
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*Str To Sql
|
|
|
|
*
|
|
|
|
*<p>Transforme une chaine de caractères en chaine Sql à partir de $src</p>
|
|
|
|
*
|
|
|
|
*<p>Utilisation de htmlentities</p>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function strToSql()
|
|
|
|
{
|
|
|
|
$tmp=$this->src;
|
|
|
|
$tmp=htmlentitiesconv($tmp); //stockés en htmlentities
|
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*Html To Sql
|
|
|
|
*
|
|
|
|
*<p>Transforme une chaine de caractères au format HTML à partir de $src</p>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function htmlToSql()
|
|
|
|
{
|
|
|
|
$tmp=$this->src;
|
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*SQL To Str
|
|
|
|
*
|
|
|
|
*<p>Transforme une chaine de caractères à partir de $src</p>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function sqlToStr()
|
|
|
|
{
|
|
|
|
$tmp=$this->src;
|
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*SQL To Html
|
|
|
|
*
|
|
|
|
*<p>Transforme une chaine de caractères au format HTML à partir de $src</p>
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function sqlToHtml()
|
|
|
|
{
|
|
|
|
$tmp=$this->src;
|
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* bytexor
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
function bytexor($a,$b,$l)
|
|
|
|
{
|
|
|
|
$c="";
|
|
|
|
for($i=0;$i<$l;$i++) {
|
2021-06-08 17:03:45 +02:00
|
|
|
$c.=$a[$i]^$b[$i];
|
2020-12-03 16:35:44 +01:00
|
|
|
}
|
|
|
|
return($c);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* binmd5
|
|
|
|
* @private
|
|
|
|
*/
|
|
|
|
function binmd5($val)
|
|
|
|
{
|
|
|
|
return(pack("H*",md5($val)));
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
*Decrypt
|
|
|
|
*<p>Decryptage de la source de donnée à partir d'une clé</p>
|
|
|
|
*
|
|
|
|
* @param chaine
|
|
|
|
* @desc clé de l'encryptage
|
|
|
|
* @return chaine
|
|
|
|
* @desc chaine décryptée à partir de la source de l'objet (source cryptée)
|
|
|
|
*/
|
|
|
|
function decrypt($paramKey)
|
|
|
|
{
|
|
|
|
$msg=$this->src;
|
|
|
|
$key=$paramKey;$sifra="";
|
|
|
|
$key1=$this->binmd5($key);
|
|
|
|
while($msg) {
|
|
|
|
$m=substr($msg,0,16);
|
|
|
|
$msg=substr($msg,16);
|
|
|
|
$sifra.=$m=$this->bytexor($m, $key1, strlen($m));
|
|
|
|
$key1=$this->binmd5($key.$key1.$m);
|
|
|
|
}
|
|
|
|
return($sifra);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
*Encryptage
|
|
|
|
*<p>Encryptage de la source de donnée à partir d'une clé</p>
|
|
|
|
*
|
|
|
|
* @param chaine
|
|
|
|
* @desc clé de l'encryptage
|
|
|
|
* @return chaine
|
|
|
|
* @desc chaine cryptée à partir de la source de l'objet'
|
|
|
|
*/
|
|
|
|
function encrypt($paramKey)
|
|
|
|
{
|
|
|
|
$msg=$this->src;
|
|
|
|
$key=$paramKey;$sifra="";
|
|
|
|
$key1=$this->binmd5($key);
|
|
|
|
while($msg) {
|
|
|
|
$m=substr($msg,0,16);
|
|
|
|
$msg=substr($msg,16);
|
|
|
|
$sifra.=$this->bytexor($m, $key1, strlen($m));
|
|
|
|
$key1=$this->binmd5($key.$key1.$m);
|
|
|
|
}
|
|
|
|
return($sifra);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* formatNameClean
|
|
|
|
*<p>Enléve tous les characteres spéciaux</p>
|
|
|
|
*
|
|
|
|
* @return chaine
|
|
|
|
* @desc chaine chaine sans caractéres spéciaux
|
|
|
|
*/
|
|
|
|
function formatNameClean()
|
|
|
|
{
|
|
|
|
$ch = $this->src;
|
|
|
|
/*Fonction permettant de supprimer les numeros, le point et l'espace à l'affichage*/
|
|
|
|
$ch = eregi_replace("^[[:space:]]*[a-z]+[.)".chr(176)."][[:space:]]+", "", $ch);
|
|
|
|
$s = strtolower($ch);
|
|
|
|
# Gestion des char remplacables
|
|
|
|
$s=ereg_replace("à|À|â|Â|ä|Ä","a",$s);
|
|
|
|
$s=ereg_replace("ç|Ç","c",$s);
|
|
|
|
$s=ereg_replace("è|È|é|É|ê|Ê|ë|Ë","e",$s);
|
|
|
|
$s=ereg_replace("î|Î|ï|Ï","i",$s);
|
|
|
|
$s=ereg_replace("ô|Ô","o",$s);
|
|
|
|
$s=ereg_replace("ù|Ù|û|Û","u",$s);
|
|
|
|
# Gestion des espaces
|
2021-09-23 11:12:03 +02:00
|
|
|
$s=ereg_replace(" | |-|/|,","_",$s);
|
2020-12-03 16:35:44 +01:00
|
|
|
$nb=strlen($s);
|
|
|
|
$i=0;
|
|
|
|
while($i<$nb)
|
|
|
|
{
|
|
|
|
// Suppression de tous les chars spèciaux!!!
|
|
|
|
if ( ((ord(substr($s,$i,1))<97) || (ord(substr($s,$i,1))>122)) && ((ord(substr($s,$i,1))!=95)) ){
|
|
|
|
$s=substr($s,0,$i).substr($s,($i+1));
|
|
|
|
$i=0;
|
|
|
|
$nb=strlen($s);
|
|
|
|
}
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
if (strlen($s)>25)
|
|
|
|
$s=substr($s,0,25);
|
|
|
|
return $s;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* formatNameClean
|
|
|
|
*<p>Enléve tous les characteres spéciaux</p>
|
|
|
|
*
|
|
|
|
* @return chaine
|
|
|
|
* @desc chaine chaine sans caractéres spéciaux
|
|
|
|
*/
|
|
|
|
function formatNameWidthNumberClean()
|
|
|
|
{
|
|
|
|
$ch = $this->src;
|
|
|
|
/*Fonction permettant de supprimer les numeros, le point et l'espace à l'affichage*/
|
|
|
|
$ch = eregi_replace("^[[:space:]]*[a-z][0-9]+[.)".chr(176)."][[:space:]]+", "", $ch);
|
|
|
|
$s = strtolower($ch);
|
|
|
|
# Gestion des char remplacables
|
|
|
|
$s=ereg_replace("à|À|â|Â|ä|Ä","a",$s);
|
|
|
|
$s=ereg_replace("ç|Ç","c",$s);
|
|
|
|
$s=ereg_replace("è|È|é|É|ê|Ê|ë|Ë","e",$s);
|
|
|
|
$s=ereg_replace("î|Î|ï|Ï","i",$s);
|
|
|
|
$s=ereg_replace("ô|Ô","o",$s);
|
|
|
|
$s=ereg_replace("ù|Ù|û|Û","u",$s);
|
|
|
|
# Gestion des espaces
|
2021-09-23 11:12:03 +02:00
|
|
|
$s=ereg_replace(" | |-|/|,","_",$s);
|
2020-12-03 16:35:44 +01:00
|
|
|
$nb=strlen($s);
|
|
|
|
$i=0;
|
|
|
|
while($i<$nb)
|
|
|
|
{
|
|
|
|
// Suppression de tous les chars spèciaux!!!
|
|
|
|
if ( ((ord(substr($s,$i,1))<48) || (ord(substr($s,$i,1))>57)) && ((ord(substr($s,$i,1))<97) || (ord(substr($s,$i,1))>122)) && ((ord(substr($s,$i,1))!=95)) ){
|
|
|
|
$s=substr($s,0,$i).substr($s,($i+1));
|
|
|
|
$i=0;
|
|
|
|
$nb=strlen($s);
|
|
|
|
}
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
if (strlen($s)>25)
|
|
|
|
$s=substr($s,0,25);
|
|
|
|
return $s;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* NoSpecialChar
|
|
|
|
*<p>Enléve tous les characteres spéciaux</p>
|
|
|
|
*
|
|
|
|
* @return chaine
|
|
|
|
* @desc chaine chaine sans caractéres spéciaux
|
|
|
|
*/
|
|
|
|
function noSpecialChar()
|
|
|
|
{
|
|
|
|
$tmp=$this->src;
|
|
|
|
$tmp=strtoupper($tmp);
|
|
|
|
$i=1;
|
|
|
|
$retourValue="";
|
|
|
|
while ($i <= strlen($tmp))
|
|
|
|
{
|
|
|
|
$testValue=substr($tmp,$i-1,1);
|
|
|
|
if (($testValue>="A" && $testValue<="Z") || ($testValue>="0" && $testValue<="9"))
|
|
|
|
{
|
|
|
|
$retourValue.=$testValue;
|
|
|
|
}
|
|
|
|
$i++;
|
|
|
|
}
|
|
|
|
return $retourValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* StripHtmlTags
|
|
|
|
*<p>Enléve toutes les tags HTML</p>
|
|
|
|
*
|
|
|
|
* @return chaine
|
|
|
|
* @desc chaine chaine sans caractéres spéciaux
|
|
|
|
*/
|
|
|
|
function stripHtmlTags()
|
|
|
|
{
|
|
|
|
$tmp=strip_tags($this->src);
|
|
|
|
$tmp=unhtmlentities($tmp);
|
|
|
|
return $tmp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|