0

この機能があるとします:

function f($string){
    $string = preg_replace("`\[.*\]`U","",$string);
    $string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$string);
    $string = htmlentities($string, ENT_COMPAT, 'utf-8');
    $string = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i","\\1", $string );
    $string = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $string);
    return $string;
}

どうすればこの機能を元に戻すことができますか...つまり。次のような関数 fReverse() をどのように記述すればよいですか。

$s = f("some string223---");
$reversed = fReverse($s);
echo $s;

そして出力:いくつかのstring223 ---

4

1 に答える 1

7

fロッシーです。正確な逆を見つけることは不可能です。たとえば、 と の両方"some string223---""some string223--------"同じ出力が得られます ( http://ideone.com/DtGQZを参照)。


それにもかかわらず、 のプレイメージを見つけることができましたf。の 5 つの置換は次のfとおりです。

  1. [との間のすべてを取り除きます]
  2. のようなエンティティと、ハイフンのよう<{エンコードされたエンティティを置き換えます。<-
  3. HTML の特殊文字 ( <&lt;&&amp;など)をエスケープします。
  4. アクセント付き文字のアクセントを削除 ( &eacute;(=é) →eなど)
  5. 英数字以外および連続するハイフンを 1 つのハイフンに変換します-

これらのうち、1、2、4、および 5 が恒等変換である可能性があります。したがって、考えられるプリイメージの 1 つは、逆の手順 3 です。

function fReverse($string) {
   return html_entity_decode($string, ENT_COMPAT, 'utf-8');
}
于 2011-04-02T18:20:07.703 に答える