[英]how to insert special character in mysql via php and display on html page
如何将特殊字符插入数据库(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()
?
只需将这些符号添加到文本中,然后将其作为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值应该始终是原始的 - 没有引号 - 所以你必须在将任何变量传递给查询之前手动转义它。
来自htmlentities()
的PHP文档:
此函数在所有方面与htmlspecialchars()相同,除了htmlentities()之外,所有具有HTML字符实体等效项的字符都将转换为这些实体。
存储时不要担心编码事物:将数据存储为原始数据,然后在HTML中显示时使用htmlentities()
对其进行编码。
编辑:另外,请阅读此内容 。
首先,您应该在插入数据库时使用mysql_real_escape_string - 这将确保您存储的任何内容都是安全编码的,但仍保留所有原始信息。
在输出方面,htmlentities和htmlspecialchars之间的主要区别在于htmlentities 将转换所有具有实体的字符,而htmlspecialchars将只转换<,>,&,“,”
只需使用准备好的陈述
$con = <"Your database connection">;
$input = "What's up? ®, ©, ™";
$stmt = $con->prepare("insert into `tablename` (`field`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.