正则表达式仍然是我的启动中的一块石头。伙计们,你能帮助我吗?
我有一段代码用于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.css
替换为blue.css
谢谢:)
答案 0 :(得分:0)
如果要使用
检查完整域名 if( strtolower($_SEVER['HTTP_HOST'])=='member.site.com' ){
// other stuff
}
如果您需要使用REQUEST_URI进行检查而不是
if( preg_match('@^/member@i',$_SERVER['REQUEST_URI']) ){
// other stuff
}
从完整网址检查主机名
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 online version
修改强>
如果您想在用户位于会员网站时更改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 ,只需删除会话变量比较!
答案 1 :(得分: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();