2017-10-08 26 views
0

私はいくつかのphpファイルの先頭にあるメタデータを呼び出すためにphp echoを使用しています。ここでpreg_matchとの衝突

<?php 
include "$_SERVER[DOCUMENT_ROOT]/meta.php"; 
?> 

はユニークなメタファイルがどのように見えるかです:いくつかの未知の理由で

<?php 

if (preg_match("@[email protected]", $_SERVER['REQUEST_URI'])) { 
$meta=<<<EOF 
<title>FR Contact title</title> 
<meta name="description" content="FR Contact description"> 
<link rel="alternate" href="https://site.ch/contact" hreflang="fr-CH" /> 
<link rel="alternate" href="https://site.ch/de/contact" hreflang="de-CH" /> 
<link rel="alternate" href="https://site.ch/it/contact" hreflang="it-CH" /> 
EOF; 
} 
elseif (preg_match("@de/[email protected]", $_SERVER['REQUEST_URI'])) { 
$meta=<<<EOF 
<title>DE Contact title</title> 
<meta name="description" content="DE Contact description"> 
<link rel="alternate" href="https://site.ch/de/contact" hreflang="de-CH" /> 
<link rel="alternate" href="https://site.ch/contact" hreflang="fr-CH" /> 
<link rel="alternate" href="https://site.ch/it/contact" hreflang="it-CH" /> 
EOF; 
} 
//echo ">>>>>" . $_SERVER['REQUEST_URI'] . "<<<<"; 
?> 

類似したURLのとを呼び出すとき、私は競合を持っているすべてのファイルは、このコードを使用して独自のメタファイルをインクルードpreg_match、国に関連する別のフォルダ名:de/contactバグにもかかわらず、フランス語の説明が表示されます。

ただし、フォルダ名を少し編集するとde/kontaktが動作し、ドイツ語の説明が表示されます。

このバグを回避する方法を教えてください。

+0

答えはあなたの質問を解決していますか? – chris85

答えて

0

最初のpreg_matchcontactが両方のURLと一致すると、正規表現は文字列全体で何かを探します。注文を交換することができます:

この方法では、ドイツの試合を最初に取得すると、この方法があります。そうでない場合は、既定のフランス語コンテンツを提供するだけです。 (あなたがそのelseifを入れて、同じpreg_matchを行うことができないならば、それはあなたが欲しい機能だと仮定します。またkontaktのために正規表現にオプションの用語を置くことができます。

if (preg_match("@de/(?:contact|kontakt)@", $_SERVER['REQUEST_URI'])) {