与preg_match冲突

时间:2017-10-08 14:57:42

标签: php regex preg-match

我正在使用php echo在几个php文件的头部调用元数据。所有文件都包含使用此代码的唯一元文件:

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

以下是独特的元文件:

<?php

if (preg_match("@contact@", $_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/contact@", $_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'] . "<<<<";
?>

由于某些未知原因,我在使用 preg_match 调用类似网址时发生冲突,尽管与国家/地区相关的文件夹名称不同: de / contact 错误并显示法语描述。

但是,稍微编辑文件夹名称时: de / kontakt 正在运行并显示德语说明。

你能告诉我如何避免这个错误吗?

1 个答案:

答案 0 :(得分:0)

第一个contact中的preg_match与两个网址匹配,正则表达式会查找整个字符串中的任何匹配项。您可以交换订单:

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

这样一来,如果你先得到德国的比赛,你就会停在那里。如果不是,您只需提供默认的法语内容。 (假设这是您想要的功能,如果不是,您可以将if放在else上并执行相同的preg_match。您还可以在{{1}的正则表达式中添加一个可选项}}

kontakt