Joomla Platform  13.1
Documentation des API du framework Joomla Platform
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Pages
str_ireplace.php
Aller à la documentation de ce fichier.
1 <?php
2 /**
3 * @version $Id$
4 * @package utf8
5 * @subpackage strings
6 */
7 
8 //---------------------------------------------------------------
9 /**
10 * UTF-8 aware alternative to str_ireplace
11 * Case-insensitive version of str_replace
12 * Note: requires utf8_strtolower
13 * Note: it's not fast and gets slower if $search / $replace is array
14 * Notes: it's based on the assumption that the lower and uppercase
15 * versions of a UTF-8 character will have the same length in bytes
16 * which is currently true given the hash table to strtolower
17 * @param string
18 * @return string
19 * @see http://www.php.net/str_ireplace
20 * @see utf8_strtolower
21 * @package utf8
22 * @subpackage strings
23 */
24 function utf8_ireplace($search, $replace, $str, $count = NULL){
25 
26  if ( !is_array($search) ) {
27 
28  $slen = strlen($search);
29  if ( $slen == 0 ) {
30  return $str;
31  }
32 
33  $lendif = strlen($replace) - strlen($search);
34  $search = utf8_strtolower($search);
35 
36  $search = preg_quote($search, '/');
37  $lstr = utf8_strtolower($str);
38  $i = 0;
39  $matched = 0;
40  while ( preg_match('/(.*)'.$search.'/Us',$lstr, $matches) ) {
41  if ( $i === $count ) {
42  break;
43  }
44  $mlen = strlen($matches[0]);
45  $lstr = substr($lstr, $mlen);
46  $str = substr_replace($str, $replace, $matched+strlen($matches[1]), $slen);
47  $matched += $mlen + $lendif;
48  $i++;
49  }
50  return $str;
51 
52  } else {
53 
54  foreach ( array_keys($search) as $k ) {
55 
56  if ( is_array($replace) ) {
57 
58  if ( array_key_exists($k,$replace) ) {
59 
60  $str = utf8_ireplace($search[$k], $replace[$k], $str, $count);
61 
62  } else {
63 
64  $str = utf8_ireplace($search[$k], '', $str, $count);
65 
66  }
67 
68  } else {
69 
70  $str = utf8_ireplace($search[$k], $replace, $str, $count);
71 
72  }
73  }
74  return $str;
75 
76  }
77 
78 }
79 
80