我有一个网络表单,可以捕获 <input type="text">
和<textarea>
元素。后端技术是PHP和MySQL。
- MySQL 数据库、表和列排序规则均为
utf8_general_ci
- 传入的表单数据已使用
stripslashes($_POST['text_input'])
进行清理 - INSERT INTO 查询语句类似于
SET text_storage = "mysql_real_escape_string($_POST['text_input'])"
我在数据库中看到不可读的字符,这是由于网络表单中出现的特殊字符(例如单撇号和双引号等)的变化造成的。
为了确保数据库表中的数据干净且可读,最佳编码实践是什么 - 整个过程中的每一步?我需要特定的<doctype>
或<meta http-equiv="Content-Type" ... />
以及为了捕获和存储干净的数据?
感谢您帮助我构建用于干净数据捕获和存储的最佳实践模板。
最佳答案
尝试在实际从数据库获取记录之前执行这些查询:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
然后继续执行您的查询。当然,上述查询必须在当前数据库连接的上下文中。
可以使用内置 PHP 函数(如 filter_var()
)轻松清理输入数据。和filter_var_array()
,但是mysql_real_escape_string()
也是很好的解决方案。
您的 HTML 文档必须在标签中具有正确的编码:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
mysql_real_escape_string()
转义 unescaped_string 中的特殊字符,同时考虑连接的当前字符集,以便可以安全地将其放置在 mysql_query()
中。如果要插入二进制数据,则必须使用此函数。该函数调用MySQL的库函数mysql_real_escape_string
,它将反斜杠添加到以下字符前面:\x00, \n, \r, \, ', " and \x1a
.
关于php - Web 表单到数据库存储的端到端流程的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9465240/