如何在php中用包含文件替换字符串中的文本

如何在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_

我想知道如何用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_-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);
          }