2011-02-27 130 views
1

我知道那里有这个功能,但我已经不会尝试那些以字符“#”工作 使用的是现在的一个IM是PHP检查一个字符串开头#

function startsWithChar($needle, $haystack) 
{ 
    return ($needle[0] === $haystack); 
} 

,并返回当我尝试检查'#'时为false。

有没有人知道一个与'#'字符一起使用的函数?

编辑: 我注意到该函数的工作原理,问题是我试图用GET来做到这一点。当GET开始于#(search.php?query =#asd)时,可以忽略该字符串被忽略。你知道这个解决方法吗?

+0

你怎么知道它用#返回false? – 2011-02-27 00:08:37

+0

虽然你在混合术语。它应该是'$ haystack [0] === $ needle'。 Haystack是我们搜索的地方,针是我们搜索的内容 – 2011-02-27 00:10:25

+0

如果URL以'#asd'结尾,那么PHP将永远不会看到它。浏览器筛选出散列/锚点名称。 $ _GET变量将是空的,这就是它失败的原因。如果你想使这个工作成功,你必须'urlencode()'#'。 – mario 2011-02-27 00:49:07

回答

1

你困惑你的针和干草堆吗?

function startsWithChar($needle, $haystack) { 
    return ($haystack[0] === $needle); 
} 

$string1 = 'Test'; 
var_dump(startsWithChar('#',$string1)) ; 

$string2 = '#Test'; 
var_dump(startsWithChar('#',$string2)) ; 
+0

我改变了他们的地方,它仍然返回false,所以这不是问题。 – Kraffs 2011-02-27 00:11:44

+0

@Kraffs你运行过**这个代码**吗? – 2011-02-27 00:16:02

+0

@Krufts - 向我们展示您正在使用的数据。只要你的字符串确实以#字符开头,这个方法就行得通。在测试前var_dump你的针和干草堆以确认。 – 2011-02-27 00:17:33

0

如何:

function startsWithChar($haystack, $needle){ 
    return mb_strpos($haystack, $needle) === 1; 
} 
+0

也行不通。 – Kraffs 2011-02-27 00:16:39

1

现在你已经编辑,这一切都变得清晰。 URL中的文字'#'字符被解释为查询字符串的结尾和片段的开头,所以您的脚本只会变得“search.php?query =”。改为使用%23。详情请参阅http://en.wikipedia.org/wiki/Percent_encoding

相关问题