首页 > 解决方案 > 如何在 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();

标签: phpmysql

解决方案


您可以使用 preg_replace 去除所有非 ascii 字符。

$str = preg_replace('/[[:^ascii:]]/', '', $str);

如果您想支持更多或更少的字符,字符集有很多选项,例如:

  • 字母数字 (A-Za-z0-9)alnum
  • 字母 (A-Za-z)alpha

完整列表可在此处获得。


推荐阅读