2017-10-08 128 views
0

我使用php echo來調用幾個php文件頭部的元數據。所有文件包括獨特的元文件中使用此代碼:與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錯誤並顯示法語說明。

然而,稍微編輯文件夾名稱時:德/ KONTAKT工作,並顯示了德國的描述。

請問如何避免此錯誤?

+0

其答案是否解決你的問題? – chris85

回答

0

您的contact在第一個preg_match匹配這兩個網址,正則表達式查找整個字符串中的任何事件。你可以交換順序:

if (preg_match("@de/[email protected]", $_SERVER['REQUEST_URI'])) { 
... 
} else { 
serve french 
} 

這樣,如果你得到了德國符合你停在那裏。如果沒有,您只需提供默認法語內容。 (假設這就是你想要的功能,如果不是你可以把那個elseif做同樣preg_match。你也可以把一個可選的術語的正則表達式kontakt

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