用PHP代码替换字符串

时间:2011-02-10 13:21:37

标签: php string plugins joomla replace

我需要在字符串中找到一个字符串(例如“foo”),然后用PHP代码替换它。有可能吗?

我正在创建一个Joomla插件。当我的文章有类似“{foo}”的内容时,我会用include(require或者其他)替换它。

我做了类似的事情:

public function onContentBeforeDisplay($context, &$row, &$params, $page=0)
    {
        // $row->text has the article text ...
        if (preg_match('/{contact-form}/', $row->text))
        {
            require_once(dirname(__FILE__) . DS . 'tmpl' . DS . 'default.php');
        }
    }

但是这段代码会在开头插入default.php。我想在{contact-form}标签中替换它。

谢谢。

4 个答案:

答案 0 :(得分:0)

您可以使用PHP函数“substr_replace()”,其详细信息为given here。     \ n“个;

/* These two examples replace all of $var with 'bob'. */
echo substr_replace($var, 'bob', 0) . "<br />\n";
echo substr_replace($var, 'bob', 0, strlen($var)) . "<br />\n";

/* Insert 'bob' right at the beginning of $var. */
echo substr_replace($var, 'bob', 0, 0) . "<br />\n";

/**
 * Your food & search is here
 */
/* These next two replace 'MNRPQR' in $var with 'bob'. */
echo substr_replace($var, 'bob', 10, -1) . "<br />\n";
echo substr_replace($var, 'bob', -7, -1) . "<br />\n";

/* Delete 'MNRPQR' from $var. */
echo substr_replace($var, '', 10, -1) . "<br />\n";
?>

答案 1 :(得分:0)

您可以创建与关键字匹配的PHP文件(例如:foo.php),只需从文本中提取关键字并使用它来包含该文件。

例如:

<?php
$str = "This is {foo} text";
$includePath = "/path/to/my/files/";

// Careful with the Regular Expression. If you allow chars like . in the
// keyword this could create a security problem. (Dots allow you to go backwards
// which would allow people to execute files outside your path.)
if (preg_match_all('/\{([\w]+)\}/', $str, $matches))
{
    foreach ($matches[1] as $_match)
    {
        $filePath = $includePath . $_match . ".php";
        if (file_exists($filePath))
        {
            include $filePath;
        }
        else
        {
            trigger_error("File does not exist '$filePath'.", E_USER_WARNING);
        }
    }
}
?>

答案 2 :(得分:0)

我想你只想要这个,不是吗?

<?php

$replacement = file_get_contents('myfile.php');

$content = str_replace('{foo}', eval($replacement), $content);

?>

答案 3 :(得分:0)

如果您需要替换远程服务器上的一系列文件中的任何字符串,那么您没有时间进行操作! ,这是你的解决方案,我希望它可以帮助别人。

 ////
 //PHP 5.3 + Class find and replace string in files
 //
 //by Bruce Afruz 
 //
 //2013
 //
 //example usage for single file:
 //
 //$new = new fileReplacement('./');
 //$new->setExt("check.php");
 //$new->changeContents("hello", "goodbye");
 //
 //example usage for multiple files:
 //
 //$new = new fileReplacement('./test');
 //$new->setExt("*.html");
 //$new->changeContents("hello", "goodbye");
 //
 //to change directory:
 //
 //$new = new fileReplacement('./test');
 //$new->setDir("./test2");
 //$new->setExt("*.html");
 //$new->changeContents("hello", "goodbye");
 ////


 class fileReplacement 
 {
  private $ext , $dir ;
  public function getDir() {
   return $this->dir;
  }
  public function setDir($dir) {
   $this->dir = $dir;
  }
   public function getExt() {
   return $this->ext;
  }
  public function setExt($ext) {
   $this->ext = $ext;
  }
 function __construct($dir) {
   $this->dir = $dir;
  }

  public function rglob($pattern = '*', $flags = 0, $path = '') {

  chdir($this->getDir());
  $paths = glob($path . '*', GLOB_MARK | GLOB_ONLYDIR | GLOB_NOSORT);
  $files = glob($path . $pattern, $flags);
  foreach ($paths as $path) {
  $files = array_merge($files, $this->rglob($pattern, $flags, $path));
  }
  return $files;
 }

 public function changeContents($replace , $sentence , $flags = 0, $path = '') {
 $all = $this->rglob($this->getExt() , $flags, $path);
 foreach ($all as $file) {

  $filename = $file;
  $handle = fopen($filename, "r");
  $contents = fread($handle, filesize($filename));
  fclose($handle);
  $contents = str_replace($replace , $sentence, $contents);

  if (is_writable($filename)) {
   if (!$handle = fopen($filename, 'w+')) {
    echo "Cannot open file ($filename)
";
    exit;
   }

   // Write $contents to our opened file.
   if (fwrite($handle, $contents) === FALSE) {
    echo "Cannot write to file ($filename)
";
    exit;
   }

   echo "Success, wrote content to file ($filename)
";

   fclose($handle);
  } else {
   echo "The file $filename is not writable
";
  }
 }
 }}