标签:php mysql special-characters
如何将特殊字符插入数据库(MySQL)之类的
注册符号(®)OR
版权符号(©)或
商标标志(™)
另外我想在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()
?
解决方法:
只需将这些符号添加到文本中,然后将其作为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值应该始终是原始的 – 没有引号 – 所以你必须在将任何变量传递给查询之前手动转义它.
标签:php,mysql,special-characters 来源: https://codeday.me/bug/20190827/1741832.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。