如何将MySQL转义添加的斜杠恢复为原始形式以正常显示
解决MySQL存储后转义字符与HTML实体的恢复问题
嘿,这个场景我太熟悉了——用mysql_real_escape_string()存带HTML标签的内容后,取出来一堆转义斜杠和实体字符,看着就头疼。咱们分两步来搞定它:
1. 去掉多余的转义斜杠
mysql_real_escape_string()会给引号等特殊字符加\转义,从数据库取回后,这些转义符就成了多余的。直接用PHP的stripslashes()函数就能一键清除:
$cleaned_from_slashes = stripslashes($your_db_data);
小提醒:如果你的PHP版本非常老(PHP 5.4之前),magic_quotes_gpc可能是开启状态,这时候要先判断是否需要去斜杠,避免重复处理。不过现在新版本PHP已经默认关闭这个配置了,大多不用操心。
2. 解码HTML实体
你看到的<、>这些是HTML实体,是存储时被转义后的结果。要把它们转回原始的HTML标签,用htmlspecialchars_decode()就对了,记得加上ENT_QUOTES参数,这样单引号和双引号的实体都会被解码:
$final_display_content = htmlspecialchars_decode($cleaned_from_slashes, ENT_QUOTES);
完整示例代码
把两步结合起来,效果一目了然:
// 模拟从数据库取出的原始数据 $raw_db_content = 'Pop some popcorn, make some hot cocoa and let your kids enjoy these movies during their winter break! Find more lists of books <a href="\'#\'">Here</a>\nThe best part? No screen time limits needed!'; // 第一步:去除转义斜杠 $without_slashes = stripslashes($raw_db_content); // 第二步:解码HTML实体 $display_ready = htmlspecialchars_decode($without_slashes, ENT_QUOTES); // 输出后就能正常显示锚点标签和换行啦 echo $display_ready;
这样处理后,你的锚点标签会变回<a href="#">Here</a>的正常形式,段落换行也能正确渲染~
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

