2014-06-16 33 views
0

我正在使用此功能來阻止一些特殊字符。我如何讓preg_replace顯示口音

function safeEscape($val) { 
    $valEscape = preg_replace('/[^\p{L}\p{N}\s]/u', '', $val); 
    $valSafe = mysql_real_escape_string($valEscape); 
    return $valSafe; 
} 

但是,當我插入帶有口音的東西到我的數據庫,爲例:

測試

的preg_replace塊字。

我該如何預防?

+0

使用'用htmlspecialchars() '? – Martijn

+0

@Martijn什麼? – deceze

+0

@user「阻止某些特殊字符」背後的想法是什麼? – deceze

回答

0

您的代碼不實際工作:

<?php 
header('Content-Type: text/plain'); 
function safeEscape($val) { 
    $valEscape = preg_replace('/[^\p{L}\p{N}\s]/u', '', $val); 
    $valSafe = mysql_real_escape_string($valEscape); 
    return $valSafe; 
} 
echo safeEscape("Test"); 
echo safeEscape("Tést"); 
echo safeEscape("T£st"); 

輸出:

TestTéstTst 

所以,問題是其他地方。也許你在某處使用了混合的文本編碼?

但話雖如此,如果您只是想清理用戶輸入以防止跨站點腳本,那麼您可能會有點過分。對於HTML,用它們的轉義等價物替換<,>&就足夠了。

此外,通過FEROZ掛答案是不會保護你不受跨站點腳本:

preg_replace("(<([a-z]+)>.*?</\\1>)is","",$input); 

例如,試試這個傳遞給你的腳本:<script >alert("XSS")</script>