我正在使用此功能来阻止某些特殊字符。
function safeEscape($val) {
$valEscape = preg_replace('/[^\p{L}\p{N}\s]/u', '', $val);
$valSafe = mysql_real_escape_string($valEscape);
return $valSafe;
}
但是当我将带有重音的东西插入我的数据库时,例如:
测试
preg_replace阻止了这个词。
我该如何防止这种情况?
答案 0 :(得分: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>