我的网站搜索框有以下代码:
<? echo preg_replace("/({$term})/i", "<b>$0</b>", NoticiaInfo($news_results, 'subtitulo')); ?>
而且我想知道是否有任何方法可以使例如字母“c”用正则表达式替换“ç”。
所以,如果我搜索“ca”,“Função”的字母“çã”将被加粗......
有没有办法用正则表达式做到这一点?
我的网站搜索框有以下代码:
<? echo preg_replace("/({$term})/i", "<b>$0</b>", NoticiaInfo($news_results, 'subtitulo')); ?>
而且我想知道是否有任何方法可以使例如字母“c”用正则表达式替换“ç”。
所以,如果我搜索“ca”,“Função”的字母“çã”将被加粗......
有没有办法用正则表达式做到这一点?
您需要将 preg_replace 与数组一起使用。尝试:
<?php
$replacements = array(
'/a/' => '<b>ã</b>',
'/c/' => '<b>ç</b>'
);
echo preg_replace(array_keys($replacements), array_values($replacements), NoticiaInfo($news_results, 'subtitulo'));
?>
$replacements
并用您要替换的其他字符填写数组。
@Ranty 提出了一个很好的观点,因此您可以尝试使用 str_replace ,您的代码将变为:
<?php
$replacements = array(
'a' => '<b>ã</b>',
'c' => '<b>ç</b>'
);
echo str_replace(array_keys($replacements), array_values($replacements), NoticiaInfo($news_results, 'subtitulo'));
?>
没有漂亮的方法可以做到这一点并保留重音符号。您首先必须用替换字符组合搜索词的所有可能排列的列表。
<?
$termList = array($term);
// You'll need to programmatically create this list
// This is just a sample, assuming that $term == 'Funcao';
$termList[] = 'Funcão';
$termList[] = 'Funçao';
$termList[] = 'Função';
$bodyText = NoticiaInfo($news_results, 'subtitulo');
foreach($termList as $searchTerm) {
$bodyText = preg_replace("/({$searchTerm})/i", "<b>$0</b>", $bodyText);
}
echo $bodyText;
?>
以编程方式创建搜索词数组将是一场噩梦,但是已经有许多密码破解应用程序已经这样做了(例如:它们为数字子字符并创建其每个排列),因此逻辑存在于某个地方。但是,当您开始获得更长的搜索字符串时,其开销开始失控。
当然,如果您不关心保持重音标记,这将变得容易得多。