好像我无法读取字符串的URL

时间:2014-06-11 12:33:15

标签: php

我需要翻译幻灯片,我为每种语言制作了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';
    }

4 个答案:

答案 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))

或使用更复杂的正则表达式模式匹配。