如何在php中用包含文件替换字符串中的文本
我想知道如何用include之类的东西替换php字符串中的一些文本 这是我的示例字符串:我有一个字符串“blablablabla{{{module:projects,id=1}}}blablablabla” 我想找到{{module:projects,id=1}},并使其包含('projects.php?id=1');就在它在字符串中的位置 我该怎么办如何在php中用包含文件替换字符串中的文本,php,string,replace,Php,String,Replace,我想知道如何用include之类的东西替换php字符串中的一些文本 这是我的示例字符串:我有一个字符串“blablablabla{{{module:projects,id=1}}}blablablabla” 我想找到{{module:projects,id=1}},并使其包含('projects.php?id=1');就在它在字符串中的位置 我该怎么办 如果我可以这样做,但我不能让它从字符串执行php,另一种选择是“bla-bla-bla-bla-bla-bla-bla”我想你可以使用preg_
如果我可以这样做,但我不能让它从字符串执行php,另一种选择是“bla-bla-bla-bla-bla-bla-bla”我想你可以使用
preg_-match
来实现这一点,但是为了避免创建规则的麻烦,我会使用explode()
来删除字符串的不同部分
按以下顺序剪切字符串:
分解($string,“{”)
并获取数组中的第二个元素($array[1]
)分解($result,“}”)
并获取第一个元素分解($result,“:”)
并获取第二个元素分解($result,“,”)
并获取两个元素$page = $result[0] . '.php';
$info = $result[1];
然后使用
include($page.$info)
我认为使用preg\u match
可以实现这一点,但为了避免创建规则的麻烦,我会使用explode()
来剪切字符串的不同部分
按以下顺序剪切字符串:
分解($string,“{”)
并获取数组中的第二个元素($array[1]
)分解($result,“}”)
并获取第一个元素分解($result,“:”)
并获取第二个元素分解($result,“,”)
并获取两个元素$page = $result[0] . '.php';
$info = $result[1];
然后使用
include($page.$info)代码>如果字符串中有重复模式,则必须查看。
有几种方法可以切断你的绳子并把它换成另一种形状
最干净的方法是创建一个正则表达式,然后使用它,例如,如果字符串中有重复模式,则必须查找。
有几种方法可以切断你的绳子并把它换成另一种形状
最干净的方法是创建一个正则表达式,然后将其与
- 您是否知道
include('projects.php?id=1')
将包含名为projects.php?id=1的文件,而不是projects.php
?
要包含projects.php
并将$\u GET['id']
设置为1
,只需执行以下操作:
$\u GET['id']=1;
包括('projects.php');
- 你应该看一看。示例(假设您知道您正在对参数做什么):
echo preg\u replace('/\\\{\\s*模块:(\w+)(,(\w+=\w+))\\s*\\\\\\\\}/',
'包括(\'\\1?\\3\');',
'blablablablabla{{module:projects,id=1}}}blablablablabla');
否则,如果我对您的参数和其他参数的假设正确,我的解决方案如下:
函数替换_模块($var){
$stringparams=array_filter(分解(',,substr($var[2],1));
$getparams=array();
foreach($stringparams作为$stringparam){
列表($key,$value)=分解('=',$stringparam);
$getparams[]=sprintf(“$\u GET[\'%s\']=\'%s\';”,
添加斜杠($key),
addslashes($value));
}
返回sprintf(“”,
内爆($getparams),addslashes($var[1]);
}
$a=preg\u replace\u回调('/\\{\\s*模块:(\w+)(,\w+=\w+)\\s*\\\\\\}/',
“更换_模块”,
‘blablablablabla{{module:projects,id=1,test=hello}}}blablablablablabla’;
编辑:
好吧,现在我想我知道你想要什么了;这是:
函数替换_模块($var){
$stringparams=array_filter(分解(',,substr($var[2],1));
foreach($stringparams作为$stringparam){
列表($key,$value)=分解('=',$stringparam);
$\u GET[$key]=$value;
}
ob_start();
包括($var[1]..php');
返回ob_end_clean();
}
$a=preg_replace_回调('/{{\\s*模块:([^,]+)((,[^,=]+=[^,]*)*)\\s*}/',
“更换_模块”,
‘blablablablabla{{module:projects,id=1,test=hello}}}blablablablablabla’;
- 您是否知道
include('projects.php?id=1')
将包含名为projects.php?id=1的文件,而不是projects.php
?
要包含projects.php
并将$\u GET['id']
设置为1
,只需执行以下操作:
$\u GET['id']=1;
包括('projects.php');
- 你应该看一看。示例(假设您知道您正在对参数做什么):
echo preg\u replace('/\\\{\\s*模块:(\w+)(,(\w+=\w+))\\s*\\\\\\\\}/',
'包括(\'\\1?\\3\');',
'blablablablabla{{module:projects,id=1}}}blablablablabla');
否则,如果我对您的参数和其他参数的假设正确,我的解决方案如下:
函数替换_模块($var){
$stringparams=array_filter(分解(',,substr($var[2],1));
$getparams=array();
foreach($stringparams作为$stringparam){
列表($key,$value)=分解('=',$stringparam);
$getparams[]=sprintf(“$\u GET[\'%s\']=\'%s\';”,
添加斜杠($key),
addslashes($value));
}
返回sprintf(“”,
内爆($getparams),addslashes($var[1]);
}
$a=preg\u replace\u回调('/\\{\\s*模块:(\w+)(,\w+=\w+)\\s*\\\\\\}/',
“更换_模块”,
‘blablablablabla{{module:projects,id=1,test=hello}}}blablablablablabla’;
编辑:
好吧,现在我想我知道你想要什么了;这是:
函数替换_模块($var){
$stringparams=array_filter(分解(',,substr($var[2],1));
foreach($stringparams作为$stringparam){
列表($key,$value)=分解('=',$stringparam);
$\u GET[$key]=$value;
}
preg_match_all('/{{ module:([^,]+),id=([0-9]+) }}/', $string, $matches);
foreach ($matches[1] as $key => $filename) {
// set $id before including the file. you could optionally set $_GET['id'].
$id = $matches[2][$key];
include($filename . '.php');
}
preg_match_all('/{{ module:([^,]+)((,[^=]+=[^,}]+)*) }}/', $string, $matches);
foreach ($matches[1] as $key => $filename) {
foreach (explode(',', trim($matches[2][$key], ', ')) as $vars) {
list($k, $v) = explode('=', $vars);
$_GET[$k] = $v;
}
// then this:
include($filename . '.php');
// or, to replace content:
ob_start();
include($filename . '.php');
$contents = ob_get_contents();
ob_end_clean();
$string = str_replace($matches[0][$key], $contents, $string);
}