1

使用可能な文字列の一部の単語をアンカー タグに置き換えたい。しかし、それは私にとって問題を引き起こします。私は以下のようにしています:

$post['Post']['comment'] = 'a class href';
$post['Post']['person'] = 'a';
$post['Post']['place'] = 'class';
$post['Post']['thing'] = 'href';

$thing = "<a class='searchName' href='javascript:void(0)'>".ucfirst($post['Post']['thing'])."</a>";
$person = "<a class='searchName' href='javascript:void(0)'>".ucfirst($post['Post']['person'])."</a>";
$place = "<a class='searchName' href='javascript:void(0)'>".ucfirst($post['Post']['place'])."</a>";

$search_strings = array($person=>$post['Post']['person'],$place=>$post['Post']['place'],$thing=>$post['Post']['thing']);
$kw_to_search_for = $post['Post']['comment'];
foreach($search_strings as $key=>$v)
{               
    if (preg_match('~\b' . $v . '\b~i', $kw_to_search_for, $m))
    {               
        $as[] = str_ireplace($v, $key, $kw_to_search_for);
    } 
}

上記のコードの出力は次のとおりです。

Array
(
    [0] => **A** cl**A**ss href
    [1] => a **Class** href
    [2] => a class **Href**
)

しかし、私は上記のような出力を望んでいません。私の要件によると、出力は次のようになります。

Array
(
    [0] => **A** class href
    [1] => a **Class** href
    [2] => a class **Href**
)

できるだけ早く提案してください........

4

1 に答える 1

0

コメント内のスペースを使用して単語を区切って検索すると、機能します。

foreach ($search_strings as $key=>$v)
{
    //space at the beginning?
    $a = preg_replace('/\s' . $v . '/i', " $key ", $kw_to_search_for);

    //space at the end?
    $b = preg_replace('/' . $v . '\s/i', " $key ", $kw_to_search_for);

    //if anything replaced, use it
    if ($a !== $kw_to_search_for)
    {
        $as[] = $a;
    }
    elseif ($b !== $kw_to_search_for)
    {
        $as[] = $b;
    }
}

出力には余分なスペースがいくつかありますが、HTML はそれを無視する必要があります...

Array
(
    [0] =>  <a class='searchName' href='javascript:void(0)'>A</a> class href
    [1] => a <a class='searchName' href='javascript:void(0)'>Class</a>  href
    [2] => a class <a class='searchName' href='javascript:void(0)'>Href</a>
)
于 2013-03-28T08:20:18.857 に答える