我有一个宁静的Web服务,该服务获取输入字符串,对其进行清理并将其保存到MySQL数据库。
我的工作流程如下: 我得到线,修剪它。然后,我删除所有非字母数字字符,并留下下划线。然后我将下划线替换为空格。然后将其保存到数据库。
$trimmedName = trim($name);
$replacedName = preg_replace("/[^0-9a-zA-Z_]/", "", $trimmedName);
$sanitizedName = trim(str_replace("_", " ", $replacedName));
问题是,这可以在99%的时间内正常工作。但是有时候,我在数据库中看到一个正方形符号。我没有那张照片,但您明白了。我不确定这是什么,为什么我的preg_replace不能将其删除。我认为有人试图利用此错误,所以我想知道我的正则表达式有什么问题,为什么它会留下一些未知字符。
答案 0 :(得分:1)
这可能是由于保存字符所致。名称上有一些字母重音。这意味着您要检查字符编码,并在代码头中将其设置为UTF-8。
PHP
header('Content-Type: text/html; charset=utf-8');
还要确保数据库表的字符集是UTF-8
您可以更新表 MySQL
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;