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.cssことですblue.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
    }

注: 本当に 1 つの行がある場合、これは行の先頭をキャッチすることで機能することを覚えておいてください。

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

ここで正規表現をテストできます: RegExp online version


編集

ユーザーがメンバー サイトにいて、セッションにログインしているときに css を変更する場合は、設定するだけではありません。

$_SESSION['member']=true;ログイン時、

ページの一部 (ヘッダーまたは css ファイルを作成する予定の場所) でこれを行います。

'/member'で始まる USING リクエスト uri :
echo '<link rel="stylesheet" href="http://site.com/'.(preg_match('@^/member@i',$_SERVER['REQUEST_URI'])==true&&$_SESSION['member']==true?'blue.css':'orange.css').'"/>';

USING メンバー ドメイン名「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 に答える