我怎样才能让preg_replace显示重音符号

时间:2014-06-16 08:52:52

标签: php

我正在使用此功能来阻止某些特殊字符。

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

但是当我将带有重音的东西插入我的数据库时,例如:

测试

preg_replace阻止了这个词。

我该如何防止这种情况?

1 个答案:

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