2011-11-10 51 views
-4

我想要這個功能轉換:轉換javascript函數PHP

function txt(str){ 
var t=''; var s=unescape(str); 
var x=Math.round(Math.sqrt(16)); 
for(var i=0;i<s.length;i++) t+= 
    String.fromCharCode(s.charCodeAt(i)^(i%2?x:0)); 
document.write(t.replace(/\*/g,'<\/td><td>').replace(/\^/g,'" title="').replace(/~/g,'<\/td><\/tr><tr class="dbeven"><td>').replace(/!/g,'<\/td><\/tr><tr class="dbodd"><td>'). 
    replace(/\|/g,'<\/td><td><a href="\/cgi-bin\/shdb\.pl\?key=') 
); 
} 

到PHP,這是我已經試過:

function Txt($str) 
{ 
    $t = ''; 
    $s = urldecode($str); 
    $x = round(sqrt(16)); 
    for($i=0;$i<count($str);$i++) 
    { 
     $t = $t . chr(charCodeAt($str, ($i^($i%2?x:0)))); 
     $t = str_replace("\*", '</td><td>', $t); 
     $t = str_replace("\^", '" title="', $t); 
     $t = str_replace("~", '</td></tr><tr class="dbeven"><td>', $t); 
     $t = str_replace("!", '</td></tr><tr class="dbodd"><td>', $t); 
     $t = str_replace("\|", '</td><td><a href="/cgi-bin/shdb.pl?key=', $t); 
    } 
    echo $t; 
} 

function charCodeAt($str, $i){ 
    return ord(substr($str, $i, 1)); 
} 

但它無法正常工作。有人能幫我嗎? 謝謝

+1

定義「不工作」。 – nickb

+1

你是什麼意思*它不工作*?輸出是不是你所期望的?它會崩潰嗎?你有沒有收到任何錯誤信息? – Dennis

+0

你期望什麼,你會得到什麼? – deceze

回答

1

在您的str_replace()中有錯誤。您必須更換*,^,|字符,而不是\*,\^,\|\是正則表達式中的轉義字符

+1

你能顯示輸入字符串和期望的輸出嗎? –

+0

你是如何使用str_split的?你應該在for循環中使用strlen而不是count。無法看到更多的地方,您嘗試訪問字符串作爲數組 –