首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Php进行自定义标记

使用Php进行自定义标记
EN

Stack Overflow用户
提问于 2011-06-27 15:59:23
回答 2查看 344关注 0票数 2

我在一个社交网站工作。例如,在发送通知时,您可以在发送的文本中以开发人员的身份在通知中键入user:20:name。所以说我发送了

“用户:20:在您的视频上评论的名称:8:名称,链接视频”

它会显示为“鲍勃在你的iOS 5评论视频上评论”。

因此,它将看到user,看到用户id和我想要的名称,然后在数据库中执行所需的工作,并将字符串中的user:20:name替换为Bob。

对于视频,它会知道我想要视频8的名称作为链接。我该如何解析这样的东西呢?我已经知道如何从数据库中抓取数据。只是停留在这一部分。知道怎么回事吗?

其中一个想法是自己获取每个标记,并对每个标记进行解析,然后在获得标记的处理版本时对其执行str_replace。

我不确定如何自己获取每个标记。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-27 16:56:53

不知道这是不是太简单了,它不处理字符串中的多个标签,但你可以尝试这样的东西作为起点:

代码语言:javascript
复制
<?php

// the original string
$str = 'User [user:20:name] did foo bar.';

// find the tag
preg_match('/(?<=\[)[a-z0-9:]+(?=\])/', $str, $tags);    

// build a db query
list($table, $id, $field) = explode(':', $tags[0]);
$sql = sprintf('SELECT %s FROM %s WHERE id = %d', $field, $table, $id);

// DB query... returns user 'Bob'
$user = 'Bob';

// replace the original tag with the user's name
$output = preg_replace('/\[user:\d+:name\]/', $user, $str);  

更新

对于多个标记,您可以使用preg_match_all(),然后遍历$tags数组,可能会使用$table变量作为键来构建查询数据数组……您必须根据您的数据库实现来决定使用这些数据来查询数据库的最有效方式。如果可以使用PDO,那么准备好的语句可能更好。缓存你的输出也是如此,因为你不想每次都预先匹配并替换所有的输出...或者只执行一次此操作,并将输出存储在数据库中。

票数 4
EN

Stack Overflow用户

发布于 2011-06-27 16:57:18

你是说像这样的东西吗?

代码语言:javascript
复制
<?php
    $string = "[video:8:name,link]";
    $string = trim($string, "[]");

    $videoMetaData = explode(",", $string);
    $nameArray = explode(":", $videoMetaData[0]);

    $name = $nameArray[2];
    $link = $videoMetaData[1];

    echo "<a href='".$link."'>".$name."</a>";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6490063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档