私のウェブサイトの検索ボックスに次のコードがあります。
<? 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;
?>
プログラムで検索語配列を作成するのは悪夢ですが、すでにそれを実行しているパスワードクラッキングアプリが多数あるため(例:数字のサブ文字を作成し、そのすべての順列を作成します)、ロジックはどこかに存在します。ただし、検索文字列が長くなり始めると、このオーバーヘッドが手に負えなくなり始めます。
もちろん、アクセント記号の維持を気にしない場合、これははるかに簡単になります。