php - 如何在 mysql 列名中使用重音符号清理字符
问题描述
我有一个字段,用户可以在其中设置 mysql 表的每一列的名称。我使用准备好的语句,因此 SQL 注入部分是安全的,但我有以下情况。我的语言(意大利语)充满了带有à、è、ì、ò和ù的词。它们是创建表时的有效字符。
然后我有第二种形式,我在这个新创建的表中插入数据。如果其中一列名称具有这些重音字符之一,我会收到错误消息。
所以我需要找到一种方法来清理用户输入,以便将这些字符替换为更安全的字符。正确的方法是什么?
其实我的代码是:
<input type="text" class="form-control input-box" id="nome_field" name="nome_field" placeholder="nome del campo" maxlength="255">
//this is where the user fills in the name of the field
在后端我处理数据:
$nome_field = str_replace('_','-',$_POST['nome_field']); //if user has put _ i replace it with -
$nome_field = str_replace(' ','-',$nome_field); //if there are spaces I put - instead
$nome_field = rtrim($nome_field,'-'); //if there was a space in the end I remove the - that was added
//HERE I NEED TO SANITIZE à è ì ò and ù
最后我插入数据
$stmt = $pdo->prepare("INSERT INTO campi (nome,...) VALUES (:nome,...)");
$stmt->bindParam(':nome', $nome_field);
$stmt->execute();
解决方案
您可以使用 preg_replace 去除所有非 ascii 字符。
$str = preg_replace('/[[:^ascii:]]/', '', $str);
如果您想支持更多或更少的字符,字符集有很多选项,例如:
- 字母数字 (A-Za-z0-9)
alnum
- 字母 (A-Za-z)
alpha
完整列表可在此处获得。
推荐阅读
- sql - Oracle sql 如何在以下情况下工作
- php - 如何在 behat.yml 中使用 selenium2 驱动程序为 firefox 和 chrome 指定自定义用户代理
- asp.net - Kudu编辑的SurfaceController文件不改变应用内容
- c# - 如何在c#中将字母数字值转换为int
- java - 当我们使用超类引用变量创建子类对象时,内存如何分配给超类和子类成员
- php - 如果参数是数组变量,如何在codeigniter模型中调用存储过程?
- c# - C# 加载文件名中带有句号/句点的文件时出错
- css - 宽度在 IE11 中不换行
- scala - 使用 Mockito 在 Scala 对象中模拟一个函数
- qt - 单击QML中另一个SpinBox的按钮时如何使SpinBox失去焦点