在 PHP 中创建短代码功能(搜索文本中的短代码,用链接替换短代码)

问题描述 投票:0回答:1

我正在尝试在我的网站上用 PHP 创建自己的短代码(直接 PHP,无 CMS)。我有一个大型数据库,想向许多文本字段添加短代码,以使链接和其他项目更容易。我知道如何使用 PHP 替换文本,但我正在尝试实现一个复杂的代码...下面是一些文本的示例:

$textarea = "a long list of text [item=23] within a large text string<br>And more stuff [item=35]"; 

我想用

<a href="/item?id=###"> ITEM NUM NAME </a>
替换 [item=###] 为了获取“项目名称”,我将使用 ### 来查询数据库。

所以,基本上,我需要...

  1. 查找文本中以“[item=”开头并以“]”结尾的字符串。并且,将它们全部添加到一个数组中(即 array('[item=23]','[item=34]') )。这我不知道该怎么办。
  2. 当我找到这些字符串时,提取数字。 (我假设我可以从字符串前面删除“[item=”字符,并从字符串末尾删除“]”。我可以做到。很简单。
  3. 对于每个数字,获取项目名称...(这是一个简单的查询,我可以使用提取的数字创建一个函数来执行该查询)。这个我能做。
  4. 然后将 [item=###] 替换为构建的 URL(即
    <a href="item?id=23">Gumdrop</a>
    )。不知道如何对多个实例和不同的项目#执行此操作。

如果有人可以提供一些指导,我将不胜感激。

php shortcode
1个回答
0
投票

您可以将

preg_replace_callback
与适当的模式一起使用,并且在回调函数的主体中,您可以将 id 替换为名称。

例如:

$replacedText = preg_replace_callback('/\[item=([1-9][0-9]+)\]/', function ($matches) {
    $id = $matches[1];

    // insert call to your name lookup function here
    $name = 'name-of-item-' . $id . '-here';

    return '<a href="/item?id=' . $id .'">' . htmlspecialchars($name) . '</a>';

}, $textarea);
© www.soinside.com 2019 - 2024. All rights reserved.