为什么我在外部文件函数中遇到变量范围问题?

时间:2012-11-05 20:09:34

标签: php function variables include scope

在我的父文件的函数中,我从外部php文件调用一个函数。这是我的(简化)代码:

父文件:

include "HelperFiles/htmlify.php";

function funcName(){
    $description = "some sample text"; 
    $description = htmlify($description, "code");

    echo $description;
};
funcName();
带有被调用函数的

htmlify.php文件:

$text = "";

function htmlify($text, $format){

    if (is_array($_POST)) {
          $html = ($_POST['text']);
        } else {
          $html = $text;
        };    

        $html = str_replace("‘", "'", $html); //Stripping out stubborn MSWord curly quotes
        $html = str_replace("’", "'", $html);
        $html = str_replace("”", '"', $html);
        $html = str_replace("“", '"', $html);
        $html = str_replace("–", "-", $html);
        $html = str_replace("…", "...", $html);



      if ($format == "code"){

        $html = str_replace(chr(149), "•",$html);
        $html = str_replace(chr(150), "—",$html);
        $html = str_replace(chr(151), "—",$html);
        $html = str_replace(chr(153), "™",$html);
        $html = str_replace(chr(169), "©",$html);
        $html = str_replace(chr(174), "®",$html);


       $trans = get_html_translation_table(HTML_ENTITIES);
       $html = strtr($html, $trans);

       $html = nl2br($html);
       $html = str_replace("<br />", "<br>",$html);

       $html = preg_replace ( "/(\s*<br>)/", "\n<br>", $html );  // seperate lines for each <br>
       //$text = str_replace ( "&amp;#", "&#", $text );
       //return htmlspecialchars(stripslashes($text), ENT_QUOTES, "UTF-8");

        return htmlspecialchars($html, ENT_QUOTES, "UTF-8");
      }
      else if ($format == "clean"){
        return $html;
      }

};

我收到以下错误:

注意:未定义的索引:第25行的C:_Localhost_Tools \ HelperFiles \ htmlify.php中的文本

我已尝试在多个位置声明范围内外的$ text变量,但似乎无法绕过此错误(警告)。任何帮助将不胜感激!感谢。

2 个答案:

答案 0 :(得分:2)

替换

if (is_array($_POST)) {

if (isset($_POST['text'])) {

你不应该再收到警告了。

但我会建议完全删除它。应始终使用函数参数 - 其他一切都令人困惑。

你也可以删除htmlify.php中的第一行 - 基本上没什么。

答案 1 :(得分:0)

错误消息显示未定义索引 ,而非未定义变量 。查看您尝试访问以text为关键字的关联变量的所有地方,$_POST['text']在我看来是您最好的选择,没有任何迹象表明您正在处理{{ 1}}数据AFAIK ...