【问题标题】:PHP strpos with special characters [duplicate]带有特殊字符的PHP strpos [重复]
【发布时间】:2018-01-25 14:17:12
【问题描述】:

我尝试用 strpos() 检查一个字符串。

$a = $_SERVER['REQUEST_URI'];

这很好用

if (strpos($a, 'en' ) == true)

但这不是

if (strpos($a, '/en/' ) == true) - Doesn't work

我尝试了很多方法来转义字符或格式化字符串,但似乎我太愚蠢了......

【问题讨论】:

  • $_SERVER['REQUEST_URI'] 中有什么内容?
  • 它怎么不起作用? if 语句不通过?
  • tld.de”后面的首页字符串
  • 它包含一个主页的字符串之后.. 我知道!但是你的$_SERVER['REQUEST_URI'] 里有什么?
  • strpos() == true 没有意义,因为它返回一个 index:参见php.net/manual/en/function.strpos.php;你可以改用!== FALSE

标签: php special-characters strpos


【解决方案1】:

问题是strpos 返回位置,如果找不到则返回 FALSE。

因此,如果 url 是 /en/something/some,那么您遇到的情况是 en 是位置 1 并且任何非零数字都是 true

当您执行/en/ 时,起始位置为 0,这是错误的。

你需要检查===到底或更准确的!==例子

<?php

$a= "/en/blo";

if (strpos($a, '/en/' ) !== false){
    echo "TRUE";
} else {
    echo "FALSE";
}

【讨论】:

  • 就是这样。工作完美。无法告诉您我有多感谢您的解决方案以及解释。
  • 这样的网址怎么样/jp/home/en/content,它也将是真的..
  • @MochamadArifin 是的,他只是在寻找 \en` as far as I can tell. The only issue is when it is at the beginning cause 0 = false. If you want to check the first 4 are /en/` 我只是 substr 并验证或直接确保 /en/ 的 strpos 为 0。
  • @LukasHwm 很高兴为您提供帮助。不确定您是否可以,但始终欢迎您接受答案!
猜你喜欢
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
相关资源
最近更新 更多