假设我有这个功能:
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;
并输出:some string223 ---
答案 0 :(得分:7)
f
是有损的。找不到确切的反转是不可能的。例如,"some string223---"
和"some string223--------"
都会提供相同的输出(请参阅http://ideone.com/DtGQZ)。
然而,我们可以找到f
的前映像。 f
的5个替换是:
[
和]
之间删除所有内容。<
,{
等实体和&lt;
等编码实体替换为连字符-
。<
→<
,&
→&
等。)é
(=é)→e
等。)-
。其中,1,2,4和5可能是同一性转换。因此,一个可能的原像只是反向步骤3:
function fReverse($string) {
return html_entity_decode($string, ENT_COMPAT, 'utf-8');
}