首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过php在mysql中插入特殊字符并在html页面上显示

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

Stack Overflow用户
提问于 2010-01-23 18:47:31
回答 2查看 40.4K关注 0票数 3

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

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

另外,我想在html页面上显示为原始。

我需要在两端(前端和后端)做些什么,请详细说明

哪个功能更有效?

方法1:

代码语言:javascript
复制
$_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);   
 }

方法二:

代码语言:javascript
复制
  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()哪个函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-23 19:20:00

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

代码语言:javascript
复制
INSERT INTO tbl_name VALUES ("Here's my text: ©®");

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

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

编辑:

根据你的评论。我不记得默认情况下是否启用了magic_quotes_gpc,但你可以很容易地撤销魔术引号的效果。只需在PHP代码的最开始添加如下内容:

代码语言:javascript
复制
if (get_magic_quotes_gpc()) {
  array_walk_recursive($_GET, 'stripslashes');
  array_walk_recursive($_POST, 'stripslashes');
  array_walk_recursive($_COOKIE, 'stripslashes');
}

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

票数 4
EN

Stack Overflow用户

发布于 2019-05-31 07:00:17

只需使用预准备语句即可。

代码语言:javascript
复制
$con = <"Your database connection">;
$input = "What's up? ®, ©, ™";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2122866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档