0

正则表达式仍然是我的绊脚石。你们能帮帮我吗,伙计们?

我有这段代码用于 CMS 中的钩子。实际上它是包含在函数中的整个代码由主代码执行。

if (preg_match('#^/member/helpdesk/index.*#i', $_SERVER['REQUEST_URI'])) //do it only for specific url
{
    $event->replace('#(<h1>Tickets.*</h1>)#i', '$1<div>Some content</div>');
}

但我真正想要的是检查页面是否属于子域member.site.com,找到<link rel="stylesheet" href="http://site.com/orange.css"/>并替换orange.cssblue.css

谢谢 :)

4

2 回答 2

0

如果你想检查完整的域名使用

   if( strtolower($_SEVER['HTTP_HOST'])=='member.site.com' ){
      // other stuff
    }

如果您需要使用 REQUEST_URI 检查它而不是

   if( preg_match('@^/member@i',$_SERVER['REQUEST_URI']) ){
      // other stuff
    }

从完整的 url 检查主机名

   if( preg_match('@^(?:http[s]*://)?([^/]+)@i',$url) ){
      // other stuff
    }

注意:请记住,如果真的有一条线,这将适用于捕捉线的开头

preg_match('@^/member/@i','/member/blahstuftuff/member/member/member/me?user=amigo&dir=mber/member')

你可以在这里测试正则表达式:RegExp 在线版


编辑

如果您想在用户位于成员站点并且如果已登录会话时更改 css,则只需设置:

$_SESSION['member']=true;登录时,

并在页面的一部分(标题或您计划编写 css 文件的任何地方)执行此操作:

使用以'/member'开头的请求 uri :
echo '<link rel="stylesheet" href="http://site.com/'.(preg_match('@^/member@i',$_SERVER['REQUEST_URI'])==true&&$_SESSION['member']==true?'blue.css':'orange.css').'"/>';

使用会员域名“member.site.com”
echo '<link rel="stylesheet" href="http://site.com/'.(strtolower($_SEVER['HTTP_HOST'])=='member.site.com'&&$_SESSION['member']==true?'blue.css':'orange.css').'"/>';

如果您希望即使是未登录的访客用户也能看到blue.css,而不仅仅是删除会话变量比较!

于 2013-03-28T23:50:12.243 回答
0

我的意思是,从本质上讲,我认为您正在尝试这样做:

$str = '<html><head><link rel="stylesheet" href="http://site.com/style.css"/></head></html>'
if (preg_match('#member\.site\.com#i'), $_SERVER['HTTP_HOST'])){
    $str = preg_replace('#http://site\.com/style\.css#', 'http://site.com/style-member.css', $str);
}

但是,也许您应该首先考虑您要替换的东西是如何生成的?也许这是一张可以放在那个位置的支票?此外,如果您要修改 html 文档,我强烈建议您使用某种解析器。如果你要做第一个,也许是这样的:

$head = '<head><link rel="stylesheet" href="http://site.com/style';
if (preg_match('#member\.site\.com#i'), $_SERVER['HTTP_HOST'])){
    $head .= '-member';
}
$head .= '.css"></head>';

但是如果你坚持解析一个html文档:

$str = '<html><head><link rel="stylesheet" href="http://site.com/style.css"/></head></html>'
$dom = new DOMDocument();
$dom->loadHTML($str);
if (preg_match('#member\.site\.com#i'), $_SERVER['HTTP_HOST'])){
    $links = $dom->getElementsByTagName('link');
    foreach ($links as $link){
        $attr = $link->attributes;
        if ($attr 
                && $attr->getNamedItem('rel')->nodeValue == 'stylesheet'
                && $attr->getNamedItem('href')->nodeValue == 'http://site.com/style.css'){
            $attr->getNamedItem('href')->nodeValue = 'http://site.com/style-member.css'
        }
    }
}
$str = $dom->saveHTML();
于 2013-03-28T23:53:51.140 回答