2024年PHP开发者大会日本站

str_ireplace

(PHP 5, PHP 7, PHP 8)

str_ireplace不区分大小写的 str_replace() 版本

描述

str_ireplace(
    数组|字符串 $search,
    数组|字符串 $replace,
    字符串|数组 $subject,
    整数 &$count = null
): 字符串|数组

此函数返回一个字符串或一个数组,其中 subject 中所有 search 的出现(不区分大小写)都被替换为给定的 replace 值。

要根据模式而不是固定字符串替换文本,请使用 preg_replace()i 模式修饰符

参数

如果 searchreplace 是数组,则 str_ireplace() 从每个数组中取一个值,并使用它们在 subject 上进行搜索和替换。如果 replace 的值少于 search,则其余替换值使用空字符串。如果 search 是数组而 replace 是字符串,则此替换字符串将用于 search 的每个值。反过来则没有意义。

如果 searchreplace 是数组,则其元素将按从前到后的顺序进行处理。

search

要搜索的值,也称为needle(针)。可以使用数组指定多个needle

replace

替换找到的 search 值的替换值。可以使用数组指定多个替换值。

subject

要搜索和替换的字符串或数组,也称为haystack(草堆)。

如果 subject 是一个数组,则搜索和替换将对 subject 的每个条目执行,返回值也是一个数组。

count

如果传递,则将其设置为执行的替换次数。

返回值

返回一个字符串或一个替换数组。

变更日志

版本 描述
8.2.0 大小写折叠不再依赖于使用 setlocale() 设置的区域设置。只会执行ASCII大小写折叠。非ASCII字节将按其字节值进行比较。

范例

示例 #1 str_ireplace() 示例

<?php
$bodytag
= str_ireplace("%body%", "black", "<body text=%BODY%>");
echo
$bodytag; // <body text=black>
?>

注释

注意: 此函数是二进制安全的。

警告

替换顺序问题

因为 str_ireplace() 从左到右进行替换,所以在进行多次替换时,它可能会替换先前插入的值。str_replace() 文档中的示例 #2 演示了这如何在实践中影响您。

参见

  • str_replace() - 将搜索字符串的所有出现替换为替换字符串
  • preg_replace() - 执行正则表达式搜索和替换
  • strtr() - 转换字符或替换子字符串

添加注释

用户贡献的注释 11 条注释

Tom
7 个月前
注意!str_ireplace 不会破坏多字节字符。但是多字节字符不会不区分大小写地被替换。

<?php
echo str_ireplace('Ä', 'Ae_', 'Ägypten'); // Ae_gypten
echo str_ireplace('ä', 'ae_', 'ägypten'); // ae_gypten
echo str_ireplace('ä', 'ae_', 'Ägypten'); // Ägypten
echo str_ireplace('Ä', 'ae_', 'ägypten'); // ägypten
echo str_ireplace('E', 'e_', 'egypt'); // e_gypt
echo str_ireplace('e', 'e_', 'Egypt'); // e_gypt
echo str_ireplace('ä', 'ae_', mb_strtolower('Ägypten')); // ae_gypten
sawdust
16年前
这是一个不同的搜索结果关键词高亮显示方法,它将以不区分大小写的方式匹配$haystack中所有关键词子字符串,并保留返回文本中的大小写。此解决方案首先以不区分大小写的方式获取$haystack中的所有匹配项,然后循环遍历这些匹配的子字符串,并在$haystack中应用区分大小写的替换。这样,每个唯一的(就大小写而言)$needle实例都会单独操作,从而允许进行区分大小写的替换以保留$needle每个唯一实例的原始大小写。

<?php
function highlightStr($haystack, $needle, $highlightColorValue) {
// 如果没有高亮颜色或字符串,则返回 $haystack,无需操作。
if (strlen($highlightColorValue) < 1 || strlen($haystack) < 1 || strlen($needle) < 1) {
return
$haystack;
}
preg_match_all("/$needle+/i", $haystack, $matches);
if (
is_array($matches[0]) && count($matches[0]) >= 1) {
foreach (
$matches[0] as $match) {
$haystack = str_replace($match, '<span style="background-color:'.$highlightColorValue.';">'.$match.'</span>', $haystack);
}
}
return
$haystack;
}
?>
daevid at daevid dot com
19年前
这是一个我快速编写的小巧函数,用于对SQL字符串进行HTML颜色编码。

<?php
/**
* 以彩色编码的形式输出HTML调试字符串,用于SQL查询
* 这对于查看许多SQL查询非常有用
* @access public
* @return void. 打印输入$query的HTML彩色编码字符串。
* @param string $query 要执行的SQL查询。
* @author Daevid Vincent [[email protected]]
* @version 1.0
* @date 04/05/05
* @todo 高亮显示SQL函数。
*/
function SQL_DEBUG( $query )
{
if(
$query == '' ) return 0;

global
$SQL_INT;
if( !isset(
$SQL_INT) ) $SQL_INT = 0;

//[dv] 这必须放在前面,否则后面结果会出错。
$query = preg_replace("/['\"]([^'\"]*)['\"]/i", "'<FONT COLOR='#FF6600'>$1</FONT>'", $query, -1);

$query = str_ireplace(
array (
'*',
'SELECT ',
'UPDATE ',
'DELETE ',
'INSERT ',
'INTO',
'VALUES',
'FROM',
'LEFT',
'JOIN',
'WHERE',
'LIMIT',
'ORDER BY',
'AND',
'OR ', //[dv] 注意空格。否则你会匹配到'COLOR' ;-)
'DESC',
'ASC',
'ON '
),
array (
"<FONT COLOR='#FF6600'><B>*</B></FONT>",
"<FONT COLOR='#00AA00'><B>SELECT</B> </FONT>",
"<FONT COLOR='#00AA00'><B>UPDATE</B> </FONT>",
"<FONT COLOR='#00AA00'><B>DELETE</B> </FONT>",
"<FONT COLOR='#00AA00'><B>INSERT</B> </FONT>",
"<FONT COLOR='#00AA00'><B>INTO</B></FONT>",
"<FONT COLOR='#00AA00'><B>VALUES</B></FONT>",
"<FONT COLOR='#00AA00'><B>FROM</B></FONT>",
"<FONT COLOR='#00CC00'><B>LEFT</B></FONT>",
"<FONT COLOR='#00CC00'><B>JOIN</B></FONT>",
"<FONT COLOR='#00AA00'><B>WHERE</B></FONT>",
"<FONT COLOR='#AA0000'><B>LIMIT</B></FONT>",
"<FONT COLOR='#00AA00'><B>ORDER BY</B></FONT>",
"<FONT COLOR='#0000AA'><B>AND</B></FONT>",
"<FONT COLOR='#0000AA'><B>OR</B> </FONT>",
"<FONT COLOR='#0000AA'><B>DESC</B></FONT>",
"<FONT COLOR='#0000AA'><B>ASC</B></FONT>",
"<FONT COLOR='#00DD00'><B>ON</B> </FONT>"
),
$query
);

echo
"<FONT COLOR='#0000FF'><B>SQL[".$SQL_INT."]:</B> ".$query."<FONT COLOR='#FF0000'>;</FONT></FONT><BR>\n";

$SQL_INT++;

}
//SQL_DEBUG
?>
Anteaus
9年前
如果您按照这里的说明操作,最终得到的代码在php5.3中有效,但在php5.4中会出错。原因是“&$count”(显式按引用传递)现在是非法结构。
很糟糕,特别是它会导致不可靠的代码,这些代码可能在测试中有效,但在生产环境中无效。手册需要更正!
stepanic dot matija at gmail dot com
14年前
修复了高亮显示第二个'o'或'a'的问题,在这个字符串中

<?php
function highlight_string ($haystack, $needle, $highlight_class) {
// 如果没有高亮颜色或字符串,则返回 $haystack,无需操作。

$first_encode='XXXXXXXXXXXXXXX'; // 编码字符串

$second_encode='YYYYYYYYYYYYYYY';

preg_match_all("/$needle+/i", $haystack, $matches);
if (
is_array($matches[0]) && count($matches[0]) >= 1) {
foreach (
$matches[0] as $match) {
$haystack = str_replace($match, $first_encode.$match.$second_encode, $haystack);
}
}

$haystack=str_replace(array($first_encode,$second_encode),
array(
'<font class="'.$highlight_class.'" >','</font>'),$haystack);

return
$haystack;
}
?>
aidan at php dot net
20年前
此功能现在在PEAR包PHP_Compat中实现。

有关在不升级PHP版本的情况下使用此函数的更多信息,请参见以下链接

http://pear.php.net/package/PHP_Compat
ishutko at gmail dot com
15年前
使函数支持西里尔字母

setlocale (LC_ALL, 'ru_RU');
Psudo - thepsudo at gmail dot com
13年前
要避免正则表达式的开销并保留大小写,请尝试以下方法

<?php
function highlight($needle, $haystack){
$ind = stripos($haystack, $needle);
$len = strlen($needle);
if(
$ind !== false){
return
substr($haystack, 0, $ind) . "<b>" . substr($haystack, $ind, $len) . "</b>" .
highlight($needle, substr($haystack, $ind + $len));
} else return
$haystack;
}
?>

此示例使用 HTML 粗体标签,但您可以轻松更改突出显示方法。
Michael dot Bond at mail dot wvu dot edu
16年前
此函数将突出显示搜索词(关键词在上下文中)。

此函数与下面函数的区别在于,它也将保留搜索词的原始大小写。因此,如果您搜索“american”,但在原始字符串中它是“American”,它将保留大写“A”以及字符串其余部分的正确大小写。

<?php
function kwic($str1,$str2) {

$kwicLen = strlen($str1);

$kwicArray = array();
$pos = 0;
$count = 0;

while(
$pos !== FALSE) {
$pos = stripos($str2,$str1,$pos);
if(
$pos !== FALSE) {
$kwicArray[$count]['kwic'] = substr($str2,$pos,$kwicLen);
$kwicArray[$count++]['pos'] = $pos;
$pos++;
}
}

for(
$I=count($kwicArray)-1;$I>=0;$I--) {
$kwic = '<span class="kwic">'.$kwicArray[$I]['kwic'].'</span>';
$str2 = substr_replace($str2,$kwic,$kwicArray[$I]['pos'],$kwicLen);
}

return(
$str2);
}
?>
hfuecks at nospam dot org
19年前
请注意,字符大小写由服务器的区域设置定义,这会影响包含非 ASCII 字符的字符串。

参见 strtolower() - https://php.net/strtolower 和注释 - 在内部,str_ireplace 将 $search 和 $replace 转换为小写以查找匹配项。
holblin at holblin dot com
13年前
突出显示警告……

我使用了

<?php
$text
= preg_replace('/('.$q.')/i','<span class=highlighting "">$1</span>' , $text);
?>

因为此行不允许正确突出显示大写和小写字母(例如,将大写字母转换为小写字母)。

<?php
$text
= str_ireplace( $q , '<span class=highlighting "">'.$q.'</span>', $text);
?>

但是当 $q 包含一些正则表达式时,您会遇到一些问题……例如
<?php $q = '('; ?>

因此,您必须使用 preg_replace 来正确突出显示文本,并且必须创建一个函数来转义错误的正则表达式字符!

我认为可以找到更好的函数,但这应该有效。

<?php
function regex_escape( $q )
{
return
preg_replace('/([\[\]\(\)\{\}\-\.\*\?\|\^\$])/', '\$1', $q);
}
?>
To Top