【问题标题】:Function eregi_replace() is deprecated [duplicate]函数 eregi_replace() 已弃用 [重复]
【发布时间】:2011-11-14 11:49:15
【问题描述】:

我在尝试支持支付网关时收到此错误消息:

Message: Function eregi_replace() is deprecated
Message: Function eregi_replace() is deprecated

这是与支付网关相关的代码

        $response = eregi_replace ( "[[:space:]]+", " ", $response );
        $response = eregi_replace ( "[\n\r]", "", $response );

任何解决此错误的帮助都会很棒!

【问题讨论】:

标签: php gateway eregi


【解决方案1】:

当一个函数被弃用时,这意味着它不再受支持并且不鼓励使用它。事实上,所有eregi 函数都已弃用。

您应该尝试其他功能,例如preg_replace()。这可能意味着您必须编辑正则表达式。

这应该可以工作

$response = preg_replace ("/\s+/", " ", $response);
$response = preg_replace ("/[\r\n]/", "", $response);

【讨论】:

  • 所有 preg_replace 都导致消息:simplexml_load_string() [function.simplexml-load-string]:实体:第 1 行:解析器警告:xmlParsePITarget:无效名称前缀“xml”错误
  • 在您的第一次替换中,您应该留一个空格作为替换..
  • 非常感谢您的帮助
  • 哦,抱歉我的错字!我编辑了我的答案。谢谢@SeRPRo
  • @TimS。有时我们都有错别字.. :)
【解决方案2】:

将这些行改为

 $response = preg_replace ( "~[ ]+~", " ", $response );
 $response = str_replace ( array("\n", "\r"), "", $response );

它使用str_replacepreg_replace,非弃用函数。

【讨论】:

  • 如果连续有3个空格怎么办?
  • 第一个我认为他会这样做,因为你只删除了双空格.. 但是如果有三个呢?
  • 完美运行,非常感谢。
  • @Marcus:如果一行有3个空格,则将其中2个替换为1个,这将导致2个空格将导致1个空格
  • @Martin 这不是真的,因为替换不会从头开始:codepad.org/4jD3ONN8
【解决方案3】:

将这些行改为

$response = preg_replace ( "/[[:space:]]+/", " ", $response );
$response = preg_replace ( "/[\n\r]/", "", $response );

它使用 PCRE、首选引擎以及不推荐使用 EREG 的原因。

【讨论】:

    【解决方案4】:

    此代码适用于此:

    $response = preg_replace("#[\r\n]#", "", $response);
    $response = preg_replace("#\s+#m", "$1", $response);
    

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 2013-09-01
      • 1970-01-01
      • 2013-08-22
      • 2018-12-16
      相关资源
      最近更新 更多