用PHP编写str_replace文本

时间:2016-05-16 15:19:15

标签: php

我的用户希望能够在他们的网站上找到联系表格。可以理解的。但它并没有真正发挥作用。

<?php
function ubbreplace($text){
    $text = str_replace("[contact-form]",'<?php include("contactform.php"); ?>',$text);
    return $text;
}
?>

包含不包括联系表格。那是为什么?

3 个答案:

答案 0 :(得分:2)

您正在使用的str_replace函数正在按预期工作。如果您在浏览器中没有看到任何内容,请查看源代码,您会在HTML代码中看到<?php标记。

输出是通常进入浏览器的内容。缓冲区是数据缓存。输出缓冲区是一个通常会进入浏览器的数据缓存,但不是因为你缓冲了它。

要获得所需的结果,我们需要获取contactform.php文件的内容并将[contact-form]替换为这些内容。我们可以通过将contactform.php的输出捕获到变量中并使用该变量作为替换来实现此目的。

<?php

function ubbreplace($text){
    if(strpos($text, '[contact-form]') !== false) {
        ob_start();
        require 'contactform.php';
        $replace = ob_get_contents();
        ob_end_clean();

        $text = str_replace('[contact-form]', $replace, $text);
    }
    return $text;
}

$content = ubbreplace('Hello world! [contact-form]');
echo $content;

?>

答案 1 :(得分:1)

function ubbreplace($text){
    if (strpos($text, "[contact-form]") !== false) {
       ob_start();
       include("contactform.php");
       $replace = ob_get_contents();
       ob_end_clean();
       $text = str_replace("[contact-form]", $replace, $text);
    }
    return $text;
}

答案 2 :(得分:1)

你正在完全从错误的一端接近这个概念,你正在做的是使用字符串,这些字符串不会被PHP作为函数处理,或包含或其他核心标记。

您可以将变量插入到字符串中,但这会在执行时发生,然后不会重新执行该字符串(并且还忽略了包含根本不是变量而是语言构造<< / em>的)。

那么,你能做些什么呢?好吧 - 使用以下逻辑重新排列代码:

  • 您有一个想要查找的字符串,然后在找到它后立即行动。

所以,要做到这一点尝试这个代码逻辑(显然是自定义)。您想要找到已设置的“标志”,然后用正确的标记替换它

<?php
if( stripos($text,"[contact-form]") !== false){
    include("contactform.php");
} 
?>

上面的内容可能并不完全符合您的意图,因为它的行为在很大程度上取决于所包含的PHP文件中的内容。

您可能需要重新排列包含内容(如果您确实需要,可以从包含return数据中获取,但我不建议这样做)。

作为一项小改进,我还建议使用mb_stripos()函数而不是标准stripos();

为了获得更清晰的更有用的结果,将include的内容设置为$contactForm = "HTML contact form data";之类的变量,然后始终运行include,但只有在找到标志时才输出内容:

包含:

$contactForm = "Some HTML contact data";

父文件包含:

<?php
include("contactform.php");
if( stripos($text,"[contact-form]") !== false){
     print $contactForm;     
} 
?>

或者您可能更容易实现的是:

<?php
include("contactform.php");
function ubbreplace($text){
    $text = str_replace("[contact-form]",$contactForm,$text);
    return $text;
}
?>

Include in the PHP manual,请注意对返回值的引用

  使用输出缓冲的

Splash58's Answer(和Brogans Answer)也是完美的   良好的解决方案,并节省了大量量化包含输出的工作量   我的答案中的变量,虽然我的答案主要是解释   目的和原始问题的失败。

     

给定一个完全打开的选项,我会选择使用输出缓冲   解决这个问题,但你需要知道发生了什么,所以如果   输出缓冲对你来说是新的definitely read up on it