PHP には、文字列 $string と配列 $acronyms ("UK" => "United Kingdom" の形式) があります。
ここで、$string 内のすべての頭字語をいくつかの HTML タグに置き換えたいと考えています。たとえば、次のようHello UK
になりますHello <acronym title="United Kingdom">UK</acronym></pre>
私はこのようにします:
foreach($acronyms as $acronym => $tooltip){
$string = preg_replace('/'.$acronym.'/i', ''.$acronym.'', $string);
}
Hello UK
問題は次のとおりです。テキストがあり、「UK」を「United Kingdom」に、「Kingdom」を「RandomWord」に置き換える配列があるとしましょう。Hello <acronym title="United <acronym title="RandomWord">Kingdom</acronym>">UK</acronym>
次に、明らかにカオスであるテキストが置き換えられます。
質問は次のとおりです: preg_replace がタグ内にない単語のみを検索するようにするにはどうすればよいですか? <acronym>
(タイトル属性にも、タグ自体にもありません)
編集:応答による2回目の試行(応答にコードを入れることができないため)。それでも同じ問題、頭字語内のテキストがもう一度置き換えられます...
foreach($acronyms as $acronym => $tooltip){
$acronyms[$acronym] = '<acronym title="'.$tooltip.'">'.$acronym.'</acronym>';
}
$string = str_ireplace(array_keys($acronyms), array_values($acronyms), $string);