PHP explode() 不能使用“-”字符


PHP explode() not work with " - " character

我想用这段代码对文本进行子串串,例如"你好 - 你好吗?"(你好吗?)

$text= "Hello - How are you?";
$strings = explode(' - ',$text);
echo $strings[0]; // Hello
echo $strings[1]; // How are you

它不起作用,因为" - "。

如果我更改为:

$text= "Hello-How are you?";
$strings = explode('-',$text);
echo $strings[0]; // Hello
echo $strings[1]; // How are you

还行。

有人可以帮助我吗?谢谢。

我找到了另一种方法:

$title= filter_var($title, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$title= str_replace('–', '-', $title);
$size = explode('-', $title);

其他任何东西都对我有用

遇到了同样的问题,经过一个小时的调查,原来从Microsoft Word复制的文本有这样的问题,word选择将减号字符( - )转换为破折号( – ) 在这里您可以并排看到它们以查看差异:-–

我不知道为什么word会这样做,但是我们习惯于看到通过单词完成这些烦人的事情,您永远不应该让任何人将文本从单词复制到您的应用程序!

为了使代码在这些条件下工作,您必须首先替换这些奇数字符:

$text= "Hello-How are you?";
$strings = str_replace('–', '-', $text);
$strings = explode('-',$text);
echo $strings[0]; // Hello
echo $strings[1]; // How are you

很有可能,您的"空格"不是真正的空格,而是制表符或类似空格,并且连字符可能与标准连接不同,例如 而不是 -

然后,您可以尝试以下操作:

$strings = preg_split('/'s[—–-]'s/', $text);

以正确拆分该字符串。