1

在我正在开发的网站中,我使用此问题中的答案将字符串转换为 slug 。它有效,但我发现存在巨大的内存泄漏问题。我做了一些研究,发现这只是目前 PHP 中的一个错误。

是否有任何替代方法可以完成诸如字符串之类的事情?

编辑:

这个问题还有另一个有趣的角度。我正在重新开发一个使用regex(呃,我知道)制作的刮板,所以我决定使用 DOMDocument / XPath 作为解决方案。

有趣的是,原来的regexscrape,也使用了上面的slugify()函数,而且没有内存问题。但是,一旦我设置了 DOMDocument 抓取,抓取在中途崩溃,并且错误总是在上面preg_replace()slugify()函数中。

因此,尽管这两种情况都使用完全相同的 slugify() 函数,但只有 DOMDocument 版本preg_replace()在线崩溃

4

3 回答 3

3

Preg_replace 对此非常有用,但另一种方法是使用http://php.net/manual/en/function.str-replace.php破解它们

于 2012-11-10T05:32:05.793 回答
1

通过取消设置变量,您应该能够释放一些内存。是的,它很脏,但可能有用

static public function slugify($text) {    
  // replace non letter or digits by -   
  $text2 = preg_replace('~[^\\pL\d]+~u', '-', $text);

  // unset $text to free up space
  unset($text);
  // trim   
  $text2 = trim($text2, '-');

  // transliterate   
  $text2 = iconv('utf-8', 'us-ascii//TRANSLIT', $text2);

  // lowercase
  $text2 = strtolower($text2);

  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text2);

  // unset $text2 to free up space
  unset($text2);

  if (empty($text))   {
    return 'n-a';   
  }
  return $text; 
}

https://bugs.php.net/bug.php?id=35258&edit=1

http://www.php.net/manual/en/function.preg-replace.php#84285

希望您找到更清洁的解决方案。

于 2012-11-10T06:48:09.550 回答
0

我发现了这个错误https://bugs.php.net/bug.php?id=38728它说要使用mb_eregi_replace()insead 函数。

它对我有用。

于 2015-10-25T12:57:55.300 回答