$hash, "location" => $location, "hash_location" => $hash_location, "hash_location_empty" => $hash_location_empty);
return $tmp;
}
function getimage_url($code = "", $vigurl = "", $no_cache = false, $entity_id = "") {
global $opac_url_base, $opac_book_pics_url, $pmb_opac_url, $pmb_url_base;
global $pmb_img_cache_folder, $pmb_img_cache_url, $opac_img_cache_folder, $opac_img_cache_url;
global $use_opac_url_base;
$url_return = $notice_id = $etagere_id = $authority_id = $noticecode = $url_image = "" ;
$url_image = $opac_book_pics_url;
$prefix=$opac_url_base;
$img_cache_folder = $opac_img_cache_folder;
$img_cache_url = $opac_img_cache_url;
$cached_in_opac = 1;
if($code){
$noticecode = pmb_preg_replace('/-|\.| /', '', $code);
}else{
$noticecode = "";
}
$for_cut="";
$out = array();
if (($vigurl) && (preg_match('#^(.+)?getimage\.php(.+)?$#',$vigurl,$out))) {
if(isset($out[1]) && trim($out[1])){
$contruct_url = trim($out[1]);
if(($contruct_url == "./") || ($contruct_url == $opac_url_base) || ($contruct_url == $pmb_opac_url) || ($contruct_url == $pmb_url_base)){
//Je peux tenter de trouve une URL statique
if(isset($out[2])){
$for_cut = trim($out[2]);
}
}/*else{
//Impossible on vient d'un autre PMB, on prend l'URL telque
}*/
}elseif(isset($out[1]) && !trim($out[1])){//L'url de la vignette de la notice commence par getimage sans rien devant
//Je peux tenter de trouve une URL statique
if(isset($out[2])){
$for_cut = trim($out[2]);
}
}
if($for_cut){
$out2=array();
if(preg_match("#(notice_id|etagere_id|authority_id)=([0-9]+)#",$for_cut,$out2)){
switch ($out2[1]) {
case "notice_id":
$notice_id = $out2[2];
$url_return = $prefix."getimage.php?notice_id=".$notice_id;
break;
case "etagere_id":
$etagere_id = $out2[2];
$url_return = $prefix."getimage.php?etagere_id=".$etagere_id;
break;
case "authority_id":
$authority_id = $out2[2];
$url_return = $prefix."getimage.php?authority_id=".$authority_id;
break;
}
}
}
}
if((strpos($vigurl,'data:image',0) === 0) || (strpos($vigurl,"vig_num.php") !== FALSE ) || (strpos($vigurl,"vign_middle.php") !== FALSE )){
$url_return = $vigurl;
}elseif(!$no_cache && $img_cache_url && $img_cache_folder && empty($use_opac_url_base)){
$manag_cache=getimage_cache($notice_id, $etagere_id, $authority_id, $vigurl, $noticecode, $url_image);
$out=array();
if($manag_cache["location"] && preg_match("#^".$img_cache_folder."(.+)$#",$manag_cache["location"],$out)){
$url_return = $img_cache_url.$out[1];
}
}
if(!$url_return){
$url_return = $prefix."getimage.php?url_image=".urlencode($url_image)."¬icecode=!!noticecode!!&entity_id=".$entity_id."&vigurl=".urlencode($vigurl);
if(!empty($use_opac_url_base)){
$url_return .="&no_caching=1";
}
$url_return = str_replace("!!noticecode!!", $noticecode, $url_return);
}
return $url_return;
}
//Fonction de récupération d'une URL vignette
function get_vignette($notice_id, $no_cache=false, $from_export=false) {
global $opac_book_pics_url, $opac_show_book_pics;
global $opac_url_base;
$url_image_ok = "";
$requete="select code,thumbnail_url from notices where notice_id=$notice_id";
$res=pmb_mysql_query($requete);
if ($res) {
$notice=pmb_mysql_fetch_object($res);
if ($from_export && $notice->thumbnail_url) {
return $notice->thumbnail_url;
} elseif ($notice->code || $notice->thumbnail_url) {
if ($opac_show_book_pics=='1' && ($opac_book_pics_url || $notice->thumbnail_url)) {
$url_image_ok = getimage_url($notice->code, $notice->thumbnail_url, $no_cache);
}
}
}
if(!$url_image_ok){
$url_image_ok = get_url_icon("vide.png", 1);
}
return $url_image_ok;
}
// ----------------------------------------------------------------------------
// fonctions de formatage de chaîne
// ----------------------------------------------------------------------------
// reg_diacrit : fonction pour traiter les caractères accentués en recherche avec regex
function reg_diacrit($chaine) {
$chaine = convert_diacrit($chaine);
$tab = pmb_split('/\s/', $chaine);
// mise en forme de la chaine pour les alternatives
// on fonctionne avec OU (pour l'instant)
if(sizeof($tab) > 1) {
$mots = array();
foreach($tab as $dummykey=>$word) {
if($word) $mots[] = "($word)";
}
return join('|', $mots);
} else {
return $chaine;
}
}
function convert_diacrit($string) {
global $tdiac;
global $charset;
global $include_path;
global $tdiac_diacritique, $tdiac_replace;
if(!$string) return;
if (!$tdiac) {
$tdiac = new XMLlist($include_path."/messages/diacritique".$charset.".xml");
$tdiac->analyser();
$tdiac_diacritique = array();
$tdiac_replace = array();
foreach($tdiac->table as $wreplace => $wdiacritique) {
$wdiacritique = str_replace(array('(', ')'), "", $wdiacritique);
foreach (explode('|', $wdiacritique) as $wdiac) {
$tdiac_diacritique[] = $wdiac;
$tdiac_replace[] = $wreplace;
}
}
}
$string = str_replace($tdiac_diacritique,$tdiac_replace,$string);
return $string;
}
//strip_empty_chars : enlêve tout ce qui n'est pas alphabétique ou numérique d'une chaine
function strip_empty_chars($string) {
// traitement des diacritiques
$string = convert_diacrit($string);
// Mis en commentaire : qu'en est-il des caractères non latins ???
// SUPPRIME DU COMMENTAIRE : ER : 12/05/2004 : ça fait tout merder...
// RECH_14 : Attention : ici suppression des éventuels "
// les " ne sont plus supprimés
$string = stripslashes($string) ;
$string = pmb_alphabetic('^a-z0-9\s', ' ',pmb_strtolower($string));
// remplacement espace insécable 0xA0: Non-breaking space
$string = clean_nbsp($string);
// espaces en début et fin
$string = pmb_preg_replace('/^\s+|\s+$/', '', $string);
// espaces en double
$string = pmb_preg_replace('/\s+/', ' ', $string);
return $string;
}
function get_empty_words($lg = 0) {
global $got_empty_word;
if(!isset($got_empty_word[$lg]) || !$got_empty_word[$lg]) {
$got_empty_word[$lg] = array();
global $empty_word;
if(is_array($empty_word)) {
$got_empty_word[$lg] = $empty_word;
}
$mots = array();
$query = "select mot from mots join linked_mots on mots.id_mot = linked_mots.num_mot where type_lien = 4";
$result = pmb_mysql_query($query);
if($result && pmb_mysql_num_rows($result)) {
while($row = pmb_mysql_fetch_object($result)) {
$mots[] = convert_diacrit($row->mot);
}
$got_empty_word[$lg] = array_diff($got_empty_word[$lg], $mots);
}
}
return $got_empty_word[$lg];
}
// strip_empty_words : fonction enlevant les mots vides d'une chaîne
function strip_empty_words($string, $lg = 0) {
// on inclut le tableau des mots-vides pour la langue par defaut si elle n'est pas precisee
// c'est normalement la langue de catalogage...
// sinon on inclut le tableau des mots vides pour la langue precisee
// si apres nettoyage des mots vide la chaine est vide alors on garde la chaine telle quelle (sans les accents)
$empty_word = get_empty_words($lg);
// nettoyage de l'entree
// traitement des diacritiques
$string = convert_diacrit($string);
// Mis en commentaire : qu'en est-il des caracteres non latins ???
// SUPPRIME DU COMMENTAIRE : ER : 12/05/2004 : ça fait tout merder...
// RECH_14 : Attention : ici suppression des eventuels "
// les " ne sont plus supprimes
$string = stripslashes($string) ;
$string = pmb_alphabetic('^a-z0-9\s', ' ',pmb_strtolower($string));
// remplacement espace insécable 0xA0: Non-breaking space
$string = clean_nbsp($string);
//$string = pmb_preg_replace_spaces($string);
$string_avant_mots_vides = $string ;
// suppression des mots vides
if(is_array($empty_word)) {
global $empty_word_converted;
if(!isset($empty_word_converted)) {
$empty_word_converted = array();
foreach($empty_word as $dummykey=>$word) {
$empty_word_converted[$dummykey] = convert_diacrit($word);
}
$empty_word_converted = implode("|",$empty_word_converted);
}
// AR-AP : \b => word boundary bien plus efficace
$string = pmb_preg_replace("/\b(".$empty_word_converted.")\b/im", '', $string);
}
// re nettoyage des espaces generes
$string = pmb_preg_replace_spaces($string);
if (!$string) {
$string = $string_avant_mots_vides ;
// re nettoyage des espaces generes
$string = pmb_preg_replace_spaces($string);
}
return $string;
}
// clean_string() : fonction de nettoyage d'une chaîne
function clean_string($string) {
// on supprime les caractËres non-imprimables
$string = pmb_preg_replace("/\\x0|[\x01-\x1f]/U","",$string);
// suppression des caractËres de ponctuation indÈsirables
// $string = pmb_preg_replace('/[\{\}\"]/', '', $string);
// supression du point et des espaces de fin
$string = pmb_preg_replace('/\s+\.$|\s+$/', '', $string);
// nettoyage des espaces autour des parenthËses
$string = pmb_preg_replace('/\(\s+/', '(', $string);
$string = pmb_preg_replace('/\s+\)/', ')', $string);
// idem pour les crochets
$string = pmb_preg_replace('/\[\s+/', '[', $string);
$string = pmb_preg_replace('/\s+\]/', ']', $string);
// petit point de détail sur les apostrophes
$string = pmb_preg_replace('/\'\s+/', "'", $string);
// 'trim' par regex
$string = pmb_preg_replace('/^\s+|\s+$/', '', $string);
// suppression des espaces doubles
$string = pmb_preg_replace('/\s+/', ' ', $string);
return $string;
}
//Corrections des caractères bizarres (voir pourris) de M$
function cp1252Toiso88591($str){
$cp1252_map = array(
"\x80" => "EUR", /* EURO SIGN */
"\x82" => "\xab", /* SINGLE LOW-9 QUOTATION MARK */
"\x83" => "\x66", /* LATIN SMALL LETTER F WITH HOOK */
"\x84" => "\xab", /* DOUBLE LOW-9 QUOTATION MARK */
"\x85" => "...", /* HORIZONTAL ELLIPSIS */
"\x86" => "?", /* DAGGER */
"\x87" => "?", /* DOUBLE DAGGER */
"\x88" => "?", /* MODIFIER LETTER CIRCUMFLEX ACCENT */
"\x89" => "?", /* PER MILLE SIGN */
"\x8a" => "S", /* LATIN CAPITAL LETTER S WITH CARON */
"\x8b" => "\x3c", /* SINGLE LEFT-POINTING ANGLE QUOTATION */
"\x8c" => "OE", /* LATIN CAPITAL LIGATURE OE */
"\x8e" => "Z", /* LATIN CAPITAL LETTER Z WITH CARON */
"\x91" => "\x27", /* LEFT SINGLE QUOTATION MARK */
"\x92" => "\x27", /* RIGHT SINGLE QUOTATION MARK */
"\x93" => "\x22", /* LEFT DOUBLE QUOTATION MARK */
"\x94" => "\x22", /* RIGHT DOUBLE QUOTATION MARK */
"\x95" => "\b7", /* BULLET */
"\x96" => "\x20", /* EN DASH */
"\x97" => "\x20\x20", /* EM DASH */
"\x98" => "\x7e", /* SMALL TILDE */
"\x99" => "?", /* TRADE MARK SIGN */
"\x9a" => "S", /* LATIN SMALL LETTER S WITH CARON */
"\x9b" => "\x3e;", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/
"\x9c" => "oe", /* LATIN SMALL LIGATURE OE */
"\x9e" => "Z", /* LATIN SMALL LETTER Z WITH CARON */
"\x9f" => "Y" /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/
);
$str = strtr($str, $cp1252_map);
return $str;
}
// ----------------------------------------------------------------------------
// test_title_query() : nouvelle version analyse d'une rech. sur titre
// ----------------------------------------------------------------------------
function test_title_query($query, $operator=TRUE, $force_regexp=FALSE) {
// Armelle : a priori utilise uniquement dans édition des périodique. Changer la-bas.
// fonction d'analyse d'une recherche sur titre
// la fonction retourne un tableau :
$query_result = array( 'type' => 0,
'restr' => '',
'order' => '',
'nbr_rows' => 0);
// FORCAGE ER 12/05/2004 : le match against avec la troncature* ne fonctionne pas...
$force_regexp = TRUE ;
// $query_result['type'] = type de la requête :
// 0 : rien (problème)
// 1: match/against
// 2: regexp
// 3: regexp pure sans traitement
// $query_result['restr'] = critères de restriction
// $query_result['order'] = critères de tri
// $query_result['indice'] = façon d'obtenir un indice de pertinence
// $query_result['nbr_rows'] = nombre de lignes qui matchent
// si operator TRUE La recherche est booléenne AND
// si operator FALSE La recherche est booléenne OR
// si force_regexp : la recherche est forcée en mode regexp
$stopwords = FALSE;
global $dbh;
// initialisation opérateur
$operator ? $dopt = 'AND' : $dopt = 'OR';
$query = strtolower($query);
// espaces en début et fin
$query = preg_replace('/^\s+|\s+$/', '', $query);
// espaces en double
$query = preg_replace('/\s+/', ' ', $query);
// traitement des caractères accentués
$query = convert_diacrit($query);
// contrôle de la requete
if(!$query)
return $query_result;
// déterminer si la requête est une regexp
// si c'est le cas, on utilise la saisie utilisateur sans modification
// (on part du principe qu'il sait ce qu'il fait)
if(preg_match('/\^|\$|\[|\]|\.|\*|\{|\}|\|/', $query)) {
// regexp pure : pas de modif de la saisie utilisateur
$query_result['type'] = 3;
$query_result['restr'] = "index_serie REGEXP '$query'";
$query_result['restr'] .= " OR tit1 REGEXP '$query'";
$query_result['restr'] .= " OR tit2 REGEXP '$query'";
$query_result['restr'] .= " OR tit3 REGEXP '$query'";
$query_result['restr'] .= " OR tit4 REGEXP '$query'";
$query_result['order'] = "index_serie ASC, tnvol ASC, tit1 ASC";
} else {
// nettoyage de la chaîne
$query = preg_replace("/[\(\)\,\;\'\!\-\+]/", ' ', $query);
// on supprime les mots vides
$query = strip_empty_words($query);
// contrôle de la requete
if(!$query) return $query_result;
// la saisie est splitée en un tableau
$tab = preg_split('/\s+/', $query);
// on cherche à détecter les mots de moins de 4 caractères (stop words)
// si il y des mots remplissant cette condition, c'est la méthode regexp qui sera employée
foreach($tab as $dummykey=>$word) {
if(strlen($word) < 4) {
$stopwords = TRUE;
break;
}
}
if($stopwords || $force_regexp) {
// méthode REGEXP
$query_result['type'] = 2;
// constitution du membre restricteur
// premier mot
$query_result['restr'] = "(index_sew REGEXP '${tab[0]} ) '";
for ($i = 1; $i < sizeof($tab); $i++) {
$query_result['restr'] .= " $dopt (index_sew REGEXP '${tab[$i]}' )";
}
// contitution de la clause de tri
$query_result['order'] = "index_serie ASC, tnvol ASC, tit1 ASC";
} else {
// méthode FULLTEXT
$query_result['type'] = 1;
// membre restricteur
$query_result['restr'] = "MATCH (index_wew) AGAINST ('*${tab[0]}*')";
for ($i = 1; $i < sizeof($tab); $i++) {
$query_result['restr'] .= " $dopt MATCH";
$query_result['restr'] .= " (index_wew)";
$query_result['restr'] .= " AGAINST ('*${tab[$i]}*')";
}
// membre de tri
$query_result['order'] = "index_serie DESC, tnvol ASC, index_sew ASC";
}
}
// récupération du nombre de lignes
$rws = "SELECT count(1) FROM notices WHERE ${query_result['restr']}";
$result = @pmb_mysql_query($rws, $dbh);
$query_result['nbr_rows'] = @pmb_mysql_result($result, 0, 0);
return $query_result;
}
//Fonction de préparation des chaines pour regexp sans match against
function analyze_query($query) {
// Armelle - a priori plus utilisé
// déterminer si la requête est une regexp
// si c'est le cas, on utilise la saisie utilisateur sans modification
// (on part du principe qu'il sait ce qu'il fait)
if(preg_match('/\^|\$|\[|\]|\.|\*|\{|\}|\|\+/', $query)) {
// traitement des caractères accentués
$query = preg_replace('/[àáâãäåÀÁÂÃÄÅ]/' , 'a', $query);
$query = preg_replace('/[éèêëÈÉÊË]/' , 'e', $query);
$query = preg_replace('/[ìíîïÌÍÎÏ]/' , 'i', $query);
$query = preg_replace('/[òóôõöÒÓÔÕÖ]/' , 'o', $query);
$query = preg_replace('/[ùúûüÙÚÛÜ]/' , 'u', $query);
$query = preg_replace('/[çÇ]/m' , 'c', $query);
return $query;
} else {
return reg_diacrit($query);
}
}
// ----------------------------------------------------------------------------
// fonction sur les dates
// ----------------------------------------------------------------------------
// today() : retourne la date du jour au format MySQL-DATE
// penser à mettre à jour les classes concernées
function today() {
$jour = date('Y-m-d');
return $jour;
}
// ----------------------------------------------------------------------------
// fonction qui retourne le nom de la page courante (SANS L'EXTENSION .php) !
// ----------------------------------------------------------------------------
function current_page() {
return str_replace("/", "", preg_replace("#\/.*\/(.*\.php)$#", "\\1", $_SERVER["PHP_SELF"]));
}
// ----------------------------------------------------------------------------
// fonction gen_liste qui génère des combo_box super sympas
// ----------------------------------------------------------------------------
function gen_liste ($requete, $champ_code, $champ_info, $nom, $on_change, $selected, $liste_vide_code, $liste_vide_info,$option_premier_code,$option_premier_info) {
$resultat_liste=pmb_mysql_query($requete);
$renvoi="\n";
return $renvoi;
}
// ----------------------------------------------------------------------------
// fonction qui retourne le nom de la page courante (SANS L'EXTENSION .php) !
// ----------------------------------------------------------------------------
function inslink($texte="", $lien="",$param="") {
if ($lien) return "$texte" ;
else return "$texte" ;
}
// ----------------------------------------------------------------------------
// fonction qui insère l'entrée $entree dans un table si image possible avec le $code
// ----------------------------------------------------------------------------
function do_image(&$entree, $code, $depliable ) {
global $charset;
global $opac_show_book_pics ;
global $opac_book_pics_url ;
global $opac_book_pics_msg;
global $opac_url_base ;
$image = "" ;
if ($code <> "") {
if ($opac_show_book_pics=='1' && $opac_book_pics_url) {
$url_image = getimage_url($code, "");
$title_image_ok = htmlentities($opac_book_pics_msg, ENT_QUOTES, $charset);
if ($depliable) {
$image = "";
} else {
$image = "";
}
}
}
if ($image) {
$entree = "
$entree
$image
" ;
} else {
$entree = "
$entree
" ;
}
}
// ------------------------------------------------------------------
// pmb_preg_match($regex,$chaine) : recherche d'une regex
// ------------------------------------------------------------------
function pmb_preg_match($regex,$chaine) {
global $charset;
if ($charset != 'utf-8') {
return preg_match($regex,$chaine);
}
else {
return preg_match($regex.'u',$chaine);
}
}
// ------------------------------------------------------------------
// pmb_preg_grep($regex,$chaine) : recherche d'une regex
// ------------------------------------------------------------------
function pmb_preg_grep($regex,$chaine) {
global $charset;
if ($charset != 'utf-8') {
return preg_grep($regex,$chaine);
}
else {
return preg_grep($regex.'u',$chaine);
}
}
// ------------------------------------------------------------------
// pmb_preg_replace($regex,$replace,$chaine) : remplacement d'une regex par une autre
// ------------------------------------------------------------------
function pmb_preg_replace($regex,$replace,$chaine) {
global $charset;
if ($charset != 'utf-8') {
return preg_replace($regex,$replace,$chaine);
}
else {
return preg_replace($regex.'u',$replace,$chaine);
}
}
// ------------------------------------------------------------------
// pmb_str_replace($toreplace,$replace,$chaine) : remplacement d'une chaine par une autre
// ------------------------------------------------------------------
function pmb_str_replace($toreplace,$replace,$chaine) {
global $charset;
if ($charset != 'utf-8') {
return str_replace($toreplace,$replace,$chaine);
}
else {
return preg_replace("/".$toreplace."/u",$replace,$chaine);
}
}
// ------------------------------------------------------------------
// pmb_split($separateur,$string) : sépare un chaine de caractère selon un separateur
// ------------------------------------------------------------------
function pmb_split($separateur,$chaine) {
global $charset;
if ($charset != 'utf-8') {
return preg_split($separateur,$chaine);
}
else {
return mb_split($separateur,$chaine);
}
}
/*
* ------------------------------------------------------------------
* pmb_alphabetic($regex,$replace,$string) : enleve les caracteres non alphabetique. Equivalent de [a-z0-9]
*
* Pour les caracteres latins;
* Pour l'instant pour les caracteres non latins:
* Armenien :
* \x{0531}-\x{0587}\x{fb13}-\x{fb17}
* Arabe :
* \x{0621}-\x{0669}\x{066E}-\x{06D3}\x{06D5}-\x{06FF}\x{FB50}-\x{FDFF}\x{FE70}-\x{FEFF}
* Cyrillique :
* \x{0400}-\x{0486}\x{0488}-\x{0513}
* Chinois :
* \x{4E00}-\x{9BFF}
* Japonais (Hiragana - Katakana - Suppl. phonetique katakana - Katakana demi-chasse) :
* \x{3040}-\x{309F}\x{30A0}-\x{30FF}\x{31F0}-\x{31FF}\x{FF00}-\x{FFEF}
* Grec :
* \x{0386}\x{0388}-\x{038A}\x{038C}\x{038E}-\x{03A1}\x{03A3}-\x{03CE}\x{03D0}\x{03FF}\x{1F00}-\x{1F15}\x{1F18}-\x{1F1D}\x{1F20}-\x{1F45}\x{1F48}-\x{1F4D}\x{1F50}-\x{1F57}\x{1F59}\x{1F5B}\x{1F5D}\x{1F5F}-\x{1F7D}\x{1F80}-\x{1FB4}\x{1FB6}-\x{1FBC}\x{1FC2}-\x{1FC4}\x{1FC6}-\x{1FCC}\x{1FD0}-\x{1FD3}\x{1FD6}-\x{1FDB}\x{1FE0}-\x{1FEC}\x{1FF2}-\x{1FF4}\x{1FF6}-\x{1FFC}
* Géorgien
* \x{10A0}-\x{10C5}\x{10D0}-\x{10FC}\x{2D00}-\x{2D25}
* ------------------------------------------------------------------
*/
function pmb_alphabetic($regex,$replace,$string) {
global $charset;
if ($charset != 'utf-8') {
return preg_replace('/['.$regex.']/', $replace, $string);
} else {
/*return preg_replace('/['.$regex
.'\x{0531}-\x{0587}\x{fb13}-\x{fb17}'
.'\x{0621}-\x{0669}\x{066E}-\x{06D3}\x{06D5}-\x{06FF}\x{FB50}-\x{FDFF}\x{FE70}-\x{FEFF}'
.'\x{0400}-\x{0486}\x{0488}-\x{0513}'
.'\x{4E00}-\x{9BFF}'
.'\x{3040}-\x{309F}\x{30A0}-\x{30FF}\x{31F0}-\x{31FF}\x{FF00}-\x{FFEF}'
.'\x{0386}\x{0388}-\x{038A}\x{038C}\x{038E}-\x{03A1}\x{03A3}-\x{03CE}\x{03D0}\x{03FF}\x{1F00}-\x{1F15}\x{1F18}-\x{1F1D}\x{1F20}-\x{1F45}\x{1F48}-\x{1F4D}\x{1F50}-\x{1F57}\x{1F59}\x{1F5B}\x{1F5D}\x{1F5F}-\x{1F7D}\x{1F80}-\x{1FB4}\x{1FB6}-\x{1FBC}\x{1FC2}-\x{1FC4}\x{1FC6}-\x{1FCC}\x{1FD0}-\x{1FD3}\x{1FD6}-\x{1FDB}\x{1FE0}-\x{1FEC}\x{1FF2}-\x{1FF4}\x{1FF6}-\x{1FFC}'
.'\x{10A0}-\x{10C5}\x{10D0}-\x{10FC}\x{2D00}-\x{2D25}'
.']/u', ' ', $string);*/
return preg_replace('/['.$regex.'\p{L}]/u', $replace, $string);//MB 28/10/14: http://www.regular-expressions.info/unicode.html
}
}
// ------------------------------------------------------------------
// pmb_strlen($string) : calcule la longueur d'une chaine pour utf-8 il s'agit du nombre de caractères.
// ------------------------------------------------------------------
function pmb_strlen($string) {
global $charset;
if ($charset != 'utf-8')
return strlen($string);
else {
return mb_strlen($string,$charset);
}
}
// ------------------------------------------------------------------
// pmb_getcar($currentcar,$string) : recupere le caractere $cuurentcar de la chaine
// ------------------------------------------------------------------
function pmb_getcar($currentcar,$string) {
global $charset;
if (!isset($string[$currentcar])) return '';
if ($charset != 'utf-8')
return $string[$currentcar];
else {
return mb_substr($string,$currentcar, 1,$charset);
}
}
// ------------------------------------------------------------------
// pmb_substr($chaine,$depart,$longueur) : recupere n caracteres
// ------------------------------------------------------------------
function pmb_substr($chaine,$depart,$longueur=0) {
global $charset;
if ($charset != 'utf-8') {
if ($longueur == 0)
return substr($chaine,$depart);
else
return substr($chaine,$depart,$longueur);
}
else {
if ($longueur == 0)
return mb_substr($chaine,$depart,$charset);
else
return mb_substr($chaine,$depart,$longueur,$charset);
}
}
// ------------------------------------------------------------------
// pmb_strtolower($string) : passage d'une chaine de caractère en minuscule
// ------------------------------------------------------------------
function pmb_strtolower($string) {
global $charset;
if ($charset != 'utf-8') {
return strtolower($string);
}
else {
return mb_strtolower($string,$charset);
}
}
// ------------------------------------------------------------------
// pmb_strtoupper($string) : passage d'une chaine de caractère en majuscule
// ------------------------------------------------------------------
function pmb_strtoupper($string) {
global $charset;
if ($charset != 'utf-8') {
return strtoupper($string);
}
else {
return mb_strtoupper($string,$charset);
}
}
// ------------------------------------------------------------------
// pmb_substr_replace($string,$replacement,$start,$length=null) : remplace un segment de la chaîne string par la chaîne replacement. Le segment est délimité par start et éventuellement par length
// ------------------------------------------------------------------
function pmb_substr_replace($string,$replacement,$start,$length=null) {
global $charset;
if($length === null){
$length=pmb_strlen($string);
}
if ($charset != 'utf-8'){
return substr_replace($string, $replacement, $start,$length);
}else{
$result = mb_substr ($string, 0, $start, $charset);
$result .= $replacement;
if ($length > 0)
{
$result .= mb_substr($string, ($start + $length), null, $charset);
}
return $result;
}
}
// ------------------------------------------------------------------
// pmb_escape() : renvoi la bonne fonction javascript en fonction du charset
// $in_context_selector : fonction généralement appelée par le point d'entrée select.php
// ------------------------------------------------------------------
function pmb_escape($in_context_selector=true) {
global $charset;
if ($charset != 'utf-8' && !$in_context_selector) {
return "escape";
} else {
return "encodeURIComponent";
}
}
// ------------------------------------------------------------------
// pmb_bidi($string) : renvoi la chaine de caractere en gérant les problemes
// d'affichage droite gauche des parenthèses
// ------------------------------------------------------------------
function pmb_bidi($string) {
global $charset;
global $lang;
return $string;
if ($charset != 'utf-8' or $lang == 'ar') {
// utf-8 obligatoire pour l'arabe
return $string;
}
else {
//\x{0600}-\x{06FF}\x{0750}-\x{077F} : Arabic
//x{0590}-\x{05FF} : hebrew
if (preg_match('/[\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{0590}-\x{05FF}]/u', $string)) {
// 1 - j'entoure les caractères arabes + espace ou parenthese ou chiffre de '
$string = preg_replace("/([\s*( )*(&)*\-*\(*0-9*]*[\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{0590}-\x{05FF}]+([,*\s*( )*(&)*\-*\(*0-9*]*[\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{0590}-\x{05FF}]*[,*\s*( )*(&)*\-*\)*0-9*]*)*)/u","\\1",$string);
// 2 - j'enleve les span dans les 'value' ca marche pas dans les ecrans de saisie
$string = preg_replace('/value=[\'\"](.*?)<\/span>[\'\"]/u','value=\'\\1\'',$string);
// 3 - j'enleve les span dans les 'title'
$string = preg_replace('/title=[\'\"](.*?)<\/span>/u','title=\'\\1',$string);
// 4 - j'enleve les span dans les 'alt'
$string = preg_replace('/alt=[\'\"](.*?)<\/span>/u','alt=\'\\1',$string);
// 4 - j'enleve les span sont entre cote, c'est que c'est dans une valeur.
$string = preg_replace('/[\'\"](.*?)<\/span>\'/u','\'\\1\'',$string);
// 4 - j'enleve les span dans les textarea.
//preg_match('/