【问题标题】:PHP explode() not work with " - " characterPHP explode() 不适用于“ - ”字符
【发布时间】:2013-09-08 20:21:30
【问题描述】:

我想给文本添加子字符串,例如。 “你好吗?”通过使用此代码

$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

没关系。

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

【问题讨论】:

  • 应该可以,你确定它们是真实的空间,而不是其他东西(例如 em 空间、en 空间或其他东西?)
  • 检查这些空格实际上是空格,而不是 en 或 em 空格:3v4l.org/T5P5X
  • 还要检查连字符“-”是否相同......不仅是空格。
  • 您总是可以在结果上使用trim 来删除字符串开头和结尾的空格,并在 - 上简单地分解 @987654327 @echo trim($strings[0]);
  • @EmilioGort 如果那是一个标签则不是

标签: php explode


【解决方案1】:

我有同样的问题,经过一个小时的调查,原来从微软Word复制的文本有这样的问题,word选择将减号( - )转换为破折号( - )在这里你可以看到他们并排看看区别: --

我不知道为什么 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

【讨论】:

    【解决方案2】:

    我找到了另一种方法:

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

    其他任何东西都适合我

    【讨论】:

    • 这是最好的解决方案,也是唯一对我有用的解决方案。
    • 在我的例子中,我使用了像“-”这样的双引号,这解决了它......谢谢!
    【解决方案3】:

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

    然后您可以尝试以下方法:

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

    正确拆分该字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 2021-05-15
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多