在 preg_replace 中调用函数时出现问题

发布于 2024-10-06 09:34:15 字数 331 浏览 2 评论 0原文

$content = "... [gallery=174] ... ";
echo $c = preg_replace('/\[gallery=([0-9]+)\]/',gallery("$1"),$content);
function gallery($id)
{
   mysql_query("select * from `table` where `id` = '$id'");
}

但作为 $id 它理解 $1,而不是查询中的 174

原因是什么?我该如何解决它?

非常感谢

$content = "... [gallery=174] ... ";
echo $c = preg_replace('/\[gallery=([0-9]+)\]/',gallery("$1"),$content);
function gallery($id)
{
   mysql_query("select * from `table` where `id` = '$id'");
}

but as $id it understand $1, instead of 174 in query.

What is the reason? And how can i fix it?

Thanks much

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弱骨蛰伏 2024-10-13 09:34:15

使用 preg_replace 无法实现您想要执行的操作:gallery() 将在搜索字符串之前执行,您无法指定$1 结果是其参数。

您正在寻找 preg_replace_callback()

What you are trying to do is not possible using preg_replace: gallery() will be executed before the string is searched, you can't specify the $1 result in its parameters.

You are looking for preg_replace_callback().

梦晓ヶ微光ヅ倾城 2024-10-13 09:34:15

编辑:如果您尝试替换它,则需要使用preg_replace_callback(),如下所示:

$c = preg_replace_callback('/\[gallery=([0-9]+)\]/', 'gallery', $m);

function gallery($m)
{
   $id = (int) $m[1];
   $result = mysql_query("select * from `table` where `id` = '$id'");

   // Fetch $result and return the appropriate gallery code here
}

旧答案

您应该使用preg_match() 来查找匹配项,因为您并不尝试将其替换为 SQL 查询,而只是从字符串中获取要在 SQL 查询中使用的值。试试这个:

$m = array();
preg_match('/\[gallery=([0-9]+)\]/', $content, $m);
$id = (int) $m[1]; // The value of the backreference $1
gallery($id);

我还相信你的gallery()函数应该返回mysql_query(),这样你就可以分析查询的结果集:

function gallery($id)
{
   return mysql_query("select * from `table` where `id` = '$id'");
}

EDIT: if you are trying to replace it, you need to use preg_replace_callback() instead, like so:

$c = preg_replace_callback('/\[gallery=([0-9]+)\]/', 'gallery', $m);

function gallery($m)
{
   $id = (int) $m[1];
   $result = mysql_query("select * from `table` where `id` = '$id'");

   // Fetch $result and return the appropriate gallery code here
}

Old answer

You should use preg_match() to find the match because you're not trying to replace it with an SQL query, simply obtaining the value from the string to use in the SQL query. Try this:

$m = array();
preg_match('/\[gallery=([0-9]+)\]/', $content, $m);
$id = (int) $m[1]; // The value of the backreference $1
gallery($id);

Also I believe your gallery() function should return mysql_query() so you can analyze the result set of the query:

function gallery($id)
{
   return mysql_query("select * from `table` where `id` = '$id'");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文