3

如何将特殊字符插入数据库(MySQL),如

Registered symbol ( ® )Copyright sign ( © )Trade Mark sign ( ™ )

我也想在 html 页面上显示为原始内容。

我必须在双方(前端和后端)做什么,请详细说明

哪个功能更有效?

方法一:

$_GET = array_map('trim', $_GET);
$_POST = array_map('trim', $_POST);
 
if(get_magic_quotes_gpc()){
  $_GET = array_map('stripslashes', $_GET);
  $_POST = array_map('stripslashes', $_POST);  
  
  $_GET = array_map('strip_tags', $_GET);
  $_POST = array_map('strip_tags', $_POST);  
 }
 else{
  $_GET = array_map('mysql_real_escape_string', $_GET);
  $_POST = array_map('mysql_real_escape_string', $_POST);   
 }

方法二:

  foreach ($_POST as $key=>$value){
        if (!get_magic_quotes_gpc()) {
          return addslashes(htmlentities(strip_tags($value),ENT_QUOTES,'UTF-8'));
          } 
          else {
             return htmlentities(strip_tags($value),ENT_QUOTES,'UTF-8');
          }
  }

我有点困惑有什么区别

htmlentities()htlspecialchars(),我必须使用哪一个?

应该使用哪个函数addslashes()stripslashes()何时插入数据库?

4

4 回答 4

4

只需简单地将这些符号添加到您的文本中,并将其作为 SQL 查询执行:

INSERT INTO tbl_name VALUES ("Here's my text: ©®");

当您想显示它时,网站不对这些符号做任何事情(但请记住至少转义<, >, &(使用htmlspecialchars())因为这些符号在 XML/SGML (HTML) 文档中具有特殊含义)

PS。还要记住使用mysql_real_escape_string()对传递给 SQL 查询的文本进行转义,以避免任何 SQL 注入问题。如果您的服务器已magic_quotes_gpc启用禁用它或至少将您的 GET/POST/COOKIE 数据过滤为其原始值。您应该始终有意识地逃避价值观。

编辑:

根据您的评论...我不记得是否magic_quotes_gpc默认启用,但您可以轻松撤消魔术引号效果。在 PHP 代码的最开始添加如下内容:

if (get_magic_quotes_gpc()) {
  array_walk_recursive($_GET, 'stripslashes');
  array_walk_recursive($_POST, 'stripslashes');
  array_walk_recursive($_COOKIE, 'stripslashes');
}

现在每个 GPC 值都应该是原始的——不带引号——所以你必须在将任何变量传递给查询之前手动对其进行转义。

于 2010-01-23T11:20:00.320 回答
1

来自 PHP 文档htmlentities()

此函数在所有方面都与 htmlspecialchars() 相同,除了 htmlentities() 之外,所有具有 HTML 字符实体等效项的字符都将转换为这些实体。

存储时不必担心编码:存储原始数据,然后htmlentities()在将其显示在 HTML 中时对其进行编码。

编辑:另外,请阅读.

于 2010-01-23T10:54:17.810 回答
1

对于初学者,您应该在插入数据库时​​只使用 mysql_real_escape_string - 这将确保您存储的任何内容都经过安全编码,同时保留所有原始信息。

在输出方面,htmlentities 和 htmlspecialchars 之间的主要区别在于htmlentities 将转换所有具有实体的字符,htmlspecialchars 只会转换 <, >, &, ", '

于 2010-01-23T10:55:41.253 回答
-1

只需使用准备好的语句。

$con = <"Your database connection">;
$input = "What's up? ®, ©, ™";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();
于 2019-05-30T23:00:16.803 回答