1

私が取り組んでいるサイトでは、この質問の答えを使用して文字列をナメクジに変換しています。動作しますが、メモリリークの問題が非常に大きいことがわかりました。調査を行ったところ、これは現在PHPのバグであることがわかりました。

スラグへのストリングのような何かを達成するための代替手段はありますか?

編集:

この問題には別の興味深い角度があります。私はregex(うーん、私は知っている)を使用して作成されたスクレーパーを再開発しているので、ソリューションとしてDOMDocument/XPathを使用することにしました。

興味深いのは、元のregexスクレイプも上記の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=38728mb_eregi_replace()を見つけましたが、関数を inseadで使用するように指示されています。

それは私のために働いた。

于 2015-10-25T12:57:55.300 に答える