dtmu88600 2011-12-17 15:09
浏览 61
已采纳

Php函数返回错误

My php function is returning an Error.

these two function from the same class

error Fatal error: Using $this when not in object context in D:\xampp\htdocs\admin\functions.php(98) : runtime-created function on line 1

public function noFollowLinks($str) {
    // replaces every link with the version provided by fixLink()
    return preg_replace_callback("#(<a.*?>)#i", create_function('$matches', 'return $this->fixLink($matches[1]);'), $str);
}

public function fixLink($input) {
    $whitelist = $GLOBALS['whitelist'];
    // if the link in $input already contains ref=”nofollow”, return it as it is
    if (preg_match('#rel\s*?=\s*?[\'"]?.*?nofollow.*?[\'"]?#i', $input)) {
        return $input;
    }
    // extract the URL from $input
    preg_match('#href\s*?=\s*?[\'"]?([^\'"]*)[\'"]?#i', $input, $captures);
    // $href will contain the extracted URL, such as http://seophp.example.com
    $href = $captures[1];
    // if URL doesn’t contain http://, assume it’s a local link
    if (!preg_match('#^\s*http://#', $href)) {
        return $input;
    }
    // extract the host name of the URL, such as seophp.example.com
    $parsed = parse_url($href);
    $host = $parsed['host'];
    // if the URL is in the whitelist, send $input back as it is
    if (in_array($host, $whitelist)) {
        return $input;
    }
    // assuming the URL already has a rel attribute, change its value to nofollow
    $x = preg_replace('#(rel\s*=\s*([\'"]?))((?(3)[^\'"]*|[^\'"]*))([\'"]?)#i', '\\1\\3,nofollow\\4', $input);
    // if the string has been modified, it means it already had a rel attribute,
    // whose value has been changed to nofollow, so we return the new version
    if ($x != $input) {
        return $x;
    }
    // if the link in the input string doesn’t have ref attribute, we add it
    else {
        return preg_replace('#<a#i', '<a rel="nofollow"', $input);
    }
}
  • 写回答

3条回答 默认 最新

  • dongzheng8463 2011-12-17 15:15
    关注

    As Andrey said, you cannot use $this in the function created by create_function. My soultion to this, would be to replace your noFollowLinks with this:

    public function noFollowLinks($str) {
        // replaces every link with the version provided by fixLink()
        return preg_replace_callback("#(<a.*?>)#i", array($this, 'fixLinkCallback'), $str);
    }
    
    private function fixLinkCallback($matches) {
        return $this->fixLink($matches[1]);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 angular开发过程中,想要读取模型文件,即图1的335行,会报404错误(如图2)。但我的springboot里配置了静态资源文件,如图3。且在该地址下我有模型文件如图4,请问该问题该如何解决呢?
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 vite打包后,页面出现h.createElement is not a function,但本地运行正常
  • ¥15 Java,消息推送配置
  • ¥15 Java计划序号重编制功能,此功能会对所有序号重新排序,排序后不改变前后置关系。
  • ¥15 关于哈夫曼树应用得到一些问题