今天用dedebiz制作网站的时候发现系统设置带有“”保存被转义无限叠加bug,叠加效果如图:
具体效果就像这样,保存一次叠加一次
<a href="https://beian.miit.gov.cn/" target="_blank">备案号</a>
<a href="https://beian.miit.gov.cn/" target="_blank">备案号</a>
<a href="https://beian.miit.gov.cn/" target="_blank">备案号</a>
而这个bug我测试了一个,只要是系统设置里带有被转义的字符串都会无限叠加,确实是 一个bug
很快为了解决问题,拉取源代码
在网站根目打开 system/helpers/string.helper.php文件 大约16行可以看到如下代码:
if (!function_exists('cn_substrR')) {
function cn_substrR($str, $slen, $startdd = 0)
{
$str = cn_substr(stripslashes($str), $slen, $startdd);
return addslashes($str);
}
}
在这段代码后面添加如下代码
if (!function_exists('cn_substrR_s')) {
function cn_substrR_s($str, $slen, $startdd = 0)
{
$str = cn_substr(stripslashes($str), $slen, $startdd);
return $str;
}
}
原因分析 cn_subst方法已经转义过了
使用 addslashes则进行二次转义,导致多重叠加写进数据库
然后在admin/sys_info.php中46行左右
$v = cn_substrR(${$k}, 1024);
修改为
$v = cn_substrR_s(${$k}, 1024);
保存,重新生成代码即可解决问题。
如需转载请注明出处。
本文地址:https://www.senxia.me/php/1.html