我尝试用strpos()检查一个字符串。
$a = $_SERVER['REQUEST_URI'];
这很好用
if (strpos($a, 'en' ) == true)
但这不是
if (strpos($a, '/en/' ) == true) - Doesn't work
我尝试了很多东西来逃避角色或格式化字符串,但因为看起来我太傻了......
答案 0 :(得分:3)
问题是strpos
返回位置,否则返回FALSE。
因此,如果网址为/en/something/some
,那么您将遇到位置为1并且任何非零数字为真的情况
当你执行/en/
时,起始位置为0,这是假的。
您需要最后检查===
或更准确!==
示例
<?php
$a= "/en/blo";
if (strpos($a, '/en/' ) !== false){
echo "TRUE";
} else {
echo "FALSE";
}
答案 1 :(得分:-3)
因为strpos的结果可能是0
在网址中/en/foo/bar
,如果返回为零,==
运算符会将条件设为false。
您必须使用!==
代替==
,并将其与false
进行比较
if (strpos($a, '/en/' ) !== false)
然后,您必须确保'/ en /'位于正确的位置。我想你会在url的第一部分检查url是否有'/ en /',而不是在第二部分。所以我为你做了一些替代方案。
$tests = ['/id/en/foobar/','/en/foo/bar', '/noen/in/here'];
foreach ($tests as $a)
{
echo "$a\tcontain '/en/' on first part = ";
if ( strpos($a, '/en/' ) === 0)
{
echo 'true';
}else {
echo 'false';
}
echo "\n";
}
另一种安全替代方案(使用爆炸):
$tests = ['/id/en/foobar/','/en/foo/bar', '/noen/in/here'];
foreach ($tests as $a)
{
echo "$a\tcontain '/en/' on first part = ";
$part = explode('/', trim($a,'/'));
if ( @$part[0] == 'en' )
{
echo 'true';
}else {
echo 'false';
}
echo "\n";
}
示例输出:
/id/en/foobar/ contain '/en/' on first part = false
/en/foo/bar contain '/en/' on first part = true
/noen/in/here contain '/en/' on first part = false