2011-04-02 59 views
0

假設我有這樣的功能:在PHP扭轉了正則表達式

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 ---

+1

爲什麼不只是保存第一個字符串的地方? – 2011-04-02 18:18:31

+0

這一點是這樣的,你可以動態地從url中反轉這些字符串,這樣就可以達到目的 – 2011-04-02 18:19:27

回答

7

f是有損耗的。不可能找到確切的反向。例如,"some string223---""some string223--------"都給出相同的輸出(請參見http://ideone.com/DtGQZ)。


不過,我們可以找到的f預圖像。的f 5個置換是:[]之間

  1. 地帶的一切。
  2. 將像<,{這樣的實體和<等編碼實體替換爲連字符-
  3. 逃逸特殊的HTML字符(<&lt;&&amp;等)
  4. 刪除的重音字符修飾(&eacute;(= E)→ e等)
  5. 轉到非字母數字和連字符連續成單連字符-

其中,有可能1,2,4和5是身份變換。因此,一個可能的preimage只是相反的步驟3:

function fReverse($string) { 
    return html_entity_decode($string, ENT_COMPAT, 'utf-8'); 
}