PHP,用&符号分解字符串

时间:2018-01-11 14:19:35

标签: php strpos ampersand

我花了很多时间在网上搜索这个,所以在有人抨击我不看之前......相信我,我有。

问题:我正在处理包含&符号的字符串,以显示两个名称。困难:有时我可能需要拉左边的名字,或者右边的名字来显示。另外一个困难是某些名称可能包含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()函数来从&符号的左侧和/或右侧获取值。

3 个答案:

答案 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];