1

我有功能:

function postNumberToLink($string) {
 return preg_replace('!\>\>\d+!', "<a href='#$0'><font color='red'>$0</font></a>", $string);
}

我的问题:

  • 什么更好(通常):在将字符串放入数据库之前格式化字符串,或者在从数据库查询后格式化明文?

  • 我想在上面的函数中更改与模式 ($0) 兼容的每个元素,这意味着删除前两个字符 (>>) 并将其余字符放入 href。我试图在它上面使用 substr,但它崩溃了。我还阅读了关于 preg_replace_callback 的信息,其中我确实将函数作为第二个参数,即使我在函数内部编写了最简单的代码,它也会崩溃。我怎样才能使文字像

"I'm replying to post no. >>21313123""I'm replying to post no. [href=21313123][red]>>21313123[/red][/href]"

对不起括号[],但我不知道 SO 标签是如何工作的。

问候马特

4

1 回答 1

1

你的问题

  1. 将它保存在数据库中的语法中。这有几个优点:

    • 您不仅限于 HTML。如果您明天创建一个输出 JSON 或 XML 的 API 会怎样?
    • 您无需在每次需要编辑时都对其进行解析和重新解析。
  2. 您可以在正则表达式中使用控制组:

    return preg_replace('!\>\>(\d+)!', "<a href='#$1'><font color='red'>$0</font></a>", $string);
    //                        ^   ^ Brackets!     ^^ First group        ^^ All match
    

加分:

  • 不要使用<font>它,因为在 Jon Skeet 的声望低于 100k 之前,它已被弃用。相反,class在您的链接上使用名称,并使用 CSS 来设置它们的样式:

    <a href="#" class="reply-to"> 
    
于 2013-09-25T14:11:50.630 回答