我需要翻译幻灯片,我为每种语言制作了4种不同的幻灯片。但是,我使用的代码始终显示&#幻灯片默认'。
网址类似于" www.domain.com/en/page"当然" en"也可以是" de"或" fr"。
$url = $_SERVER['REQUEST_URI'];
$english = 'en';
$german = 'de';
$french = 'fr';
if (strpos ($url, $english) == true) {
echo 'slideshow1';
}
elseif (strpos ($url, $french) == true) {
echo 'slideshow2';
}
elseif (strpos ($url, $german) == true) {
echo 'slideshow3';
}
else {
echo 'slideshow-default';
}
答案 0 :(得分:0)
strpos
只返回一个整数或“FALSE'”。像这样执行你的测试 -
if (strpos ($url, $english) !== FALSE) { // one way
echo 'slideshow1';
}
elseif (strpos ($url, $french) > 0) { // another way
echo 'slideshow2';
}
elseif (strpos ($url, $german) > 0) {
echo 'slideshow3';
}
else {
echo 'slideshow-default';
}
使用> 0
在这里是安全的,因为我们正在搜索URL字符串,在我看来,可以安全地假设语言变量不在字符串的前面。< / p>
答案 1 :(得分:0)
您应该阅读手册:http://uk3.php.net/strpos
返回针相对于针的位置 haystack字符串的开头(与offset无关)。另请注意 字符串位置从0开始,而不是1。
如果未找到针,则返回FALSE。
所以,你就是这样做的:
<?php
$url = $_SERVER['REQUEST_URI'];
$english = 'en';
$german = 'de';
$french = 'fr';
if (strpos ($url, $english) !== false) {
echo 'slideshow1';
}
elseif (strpos ($url, $french) !== false) {
echo 'slideshow2';
}
elseif (strpos ($url, $german) !== false) {
echo 'slideshow3';
}
else {
echo 'slideshow-default';
}
答案 2 :(得分:0)
为了使您的代码更加灵活,您必须重构它以使用数组。
所以你的代码应该是这样的:
$url = $_SERVER['REQUEST_URI'];
$a_map = array(
'en' => 'slideshow1',
'de' => 'slideshow2',
'fr' => 'slideshow3',
);
$arr = array_filter(
array_flip($a_map),
function ($v) use($url) { return strpos($url, $v) !== false; }
);
echo count($arr)? array_pop(array_values($arr)) : 'slideshow-default';
答案 3 :(得分:-1)
strpos不会返回true
。它将返回false
或int。
http://php.net/manual/en/function.strpos.php
您可以与false
if (false !== strpos ($url, $english))
或使用更复杂的正则表达式模式匹配。