1

我的问题在下面的 if 语句中。我的标签结构是这样的:tag1, tag2, tag3

我实现了每篇文章的每个标签的自动链接,但是如果标签的数量超过1,我需要替换两个字符,即1个逗号+1个空格字符,并在相关<p></p>对内。这 2 个字符 {1 comma+1 space} 在最后一个</p>标签之前。我的意思是:

我的输入是(html源):

<p>Etiketler: <a href="http://localhost/türkçe/etiketler/tag1">tag1</a>, <a href="http://localhost/türkçe/etiketler/tag2">tag2</a>, </p>

我想要的输出是(html源)

<p>Etiketler: <a href="http://localhost/türkçe/etiketler/tag1">tag1</a>, <a href="http://localhost/türkçe/etiketler/tag2">tag2</a></p>

我的自定义函数如下>现在,你看到了,preg_replace但我也试过了str_replace。我的编码是utf-8如果它有帮助。我阅读了这两个函数的 php.net 手册,但我无法摆脱这两个字符。

你能帮我吗?

function etiketleri_link_yap ($article_tags)
{
    $array_of_tags = explode(", ", $article_tags);
    if (count($array_of_tags) >= 2) 
        {
            $ely ='';
            for ($i = 0; $i < count($array_of_tags); $i++) 
                {
                    $ely .= '<a href="'.sitenin_koku.'türkçe/etiketler/'.$array_of_tags[$i].'">'.$array_of_tags[$i].'</a>, ';
                }
            $arabunu ="/<\/a>, <\/p>/"; $degistir  = '</a></p>';
            $ely = preg_replace($arabunu, $degistir, $ely);
            return $ely;
        }
    else
        {
            $ely ='<a href="'.sitenin_koku.'türkçe/etiketler/'.$array_of_tags[0].'">'.$array_of_tags[0].'</a>';
            return $ely;
        }
}
4

1 回答 1

3

您的变量中没有结束<p>标签$ely,只有<a>标签,因此您的正则表达式永远不会匹配。

我会构建一个标签/标签链接数组并在最后将它们内爆:

$links = array();
for ($i = 0; $i < count($array_of_tags); $i++) 
{
   $links[] = '<a href="'.sitenin_koku.'türkçe/etiketler/'.$array_of_tags[$i].'">'.$array_of_tags[$i].'</a>';
}
$ely = implode(', ', $links);

顺便说一句,我也会使用 aforeach来循环,$array_of_tags但如果您确定索引从 0 开始并且没有丢失的索引,那么结果应该是相同的。

于 2013-02-22T18:11:34.897 回答