$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('//u',$string,$toto); //printr($toto); $string = preg_replace('//u','