我花了很多时间在网上搜索这个,所以在有人抨击我不看之前......相信我,我有。
问题:我正在处理包含&符号的字符串,以显示两个名称。困难:有时我可能需要拉左边的名字,或者右边的名字来显示。另外一个困难是某些名称可能包含HTML实体,当然这些实体也使用了&符号。
示例:我可以使用简单的东西:
"弗雷德&威尔玛"
为了得到#34;弗雷德"从字符串,我尝试使用PHP函数STRPOS(),但我什么都没得到。
$nPos = strpos( " & ", $names );
请注意,我在两边都使用空格以避免HTML实体出现问题。
更有趣,检查我是否没有结果:
if ( $nPos === 0 )
{
echo "String ' $' not found in " . $names . "<br />";
}
不返回值。这告诉我,从我可以找到的各种文档和网络上看,我应该有一个有用的$ nPos值。
如果我添加:
echo "Position of string ' & ': " . $nPos . "<br />";
我在双引号中的文本后面得到一个空白值。
我不知道怎么做我需要的东西。我需要获得&#34;的位置。 &安培; &#34;人物,但我没有得到它。从那里显然需要使用substr()函数来从&符号的左侧和/或右侧获取值。
答案 0 :(得分:3)
strpos
第一个参数是haystack - 在其中进行搜索的字符串&amp;第二个是你要搜索的针线。所以只需交换参数:
$nPos = strpos( $names, " & " );
您可以找到更多信息here
答案 1 :(得分:2)
如果你只需要名字,我会把它分成一个数组:
$nameArray = explode(' & ', $names);
这不会在HTML上意外分裂,因为在这种情况下&
后面没有空格。
答案 2 :(得分:1)
您可以使用内置PHP的explode($delimeter, $subject_string)
函数。例如:
$names = 'firstName & lastName';
// use `&` as delimeter to split on and callback `trim` function on each array item
$names_array = array_map('trim',explode(' & ', $names));
现在$ names_array将如下所示:
array(
[0] => 'firstName'
[1] => 'lastName'
)
可以按以下方式访问:
$firstName = $names_array[0];
$lastName = $names_array[1];