代码之家  ›  专栏  ›  技术社区  ›  xkeshav

如何通过php在mysql中插入特殊字符并在html页面上显示

  •  3
  • xkeshav  · 技术社区  · 15 年前

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

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

    我还想在HTML页面上显示为原始。

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

    哪个功能更有效?

    方法1:

    $_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);   
     }
    

    方法2:

      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() 何时插入数据库?

    3 回复  |  直到 11 年前
        1
  •  4
  •   Crozin    15 年前

    只需将这些符号添加到文本中,并将其作为SQL查询执行即可:

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

    当你想显示一个符号时,网站不会对这些符号做任何事情(但请记住至少要避开 < , > , & (使用 htmlspecialchars() )因为这些在XML/SGML(HTML)文档中有特殊意义)

    另请记住,要转义传递给SQL查询的文本,请使用 mysql_real_escape_string() 以避免任何SQL注入问题。如果您的服务器 magic_quotes_gpc 已启用禁用它,或者至少将get/post/cookie数据筛选为其原始值。你应该有意识地逃避价值观。

    编辑:

    根据你的评论…我不记得 魔力语录 默认情况下是启用的,但您可以轻松撤消魔术引号效果。就在PHP代码的开头,添加如下内容:

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

    现在,每个GPC值都应该是原始的(没有引号),所以在将任何变量传递到查询之前,必须手动对其进行转义。

        2
  •  1
  •   Community CDub    7 年前

    从php文档 htmlentities() :

    此函数与 htmlspecialChars()在所有方面,除了 使用htmlEntities(),所有字符 具有HTML字符实体的 等价物被转换成 实体。

    存储数据时不要担心编码问题:将数据原始存储,然后用 HTMLN() 在HTML中显示时。

    编辑:同时,阅读 this .

        3
  •  1
  •   John Parker    15 年前

    首先,你应该 插入数据库时只需使用mysql_real_escape_字符串 -这将确保您存储的内容是安全编码的,同时保留所有原始信息。

    在输出方面,HTMLEntities和HTMLSpecialChars的主要区别在于 HTMLEntities将转换具有实体的所有字符 鉴于 HTMLSpecialChars将只转换<、>、&、,'