php+js 分享博客的功能

本文介绍了一种在HTML中安全分享包含链接与特殊字符文本的方法,避免了因内容导致的显示错误,并通过增加独立标签存储信息的方式提高了安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一开始,我是这么做的,把要分享的博客内容放到a标签的value中,然后通过点击事件传值this.getAttribute(‘value),传给transMit 函数;

<a href="javascript:void(0);" id="blog-share-add-<?=$arResult["Post"]["ID"]?>" value="<?=$arResult["Post"]["textFormated"]?>" onclick="transMit('分享自//<?=CUser::FormatName($arParams["NAME_TEMPLATE"], $arTmpUser, ($arParams["SHOW_LOGIN"] != "N" ? true : false))?>:'+this.getAttribute('value'),event)"></a>

然后,产品小哥上网上随便截了段话就发微博测试了,下面是那段话的内容。你应该发现了,他复制的是段带连接的文字;于是乎,这段文字在我上面的a标签value中就炸了;

房屋建筑工程大体操作流程:
<br>1、<a href="https://www.baidu.com/s?wd=%E5%8F%91%E6%94%B9%E5%A7%94&amp;tn=44039180_cpr&amp;fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4n1R3uHnkuHIBPvcsuAc10ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1b1PW0vPjc3" target="_blank">发改委</a>立项
<br>2、规划委审批
<br>3、公开招标或<a href="https://www.baidu.com/s?wd=%E7%9B%B4%E6%8E%A5%E5%8F%91%E5%8C%85&amp;tn=44039180_cpr&amp;fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4n1R3uHnkuHIBPvcsuAc10ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1b1PW0vPjc3" target="_blank">直接发包</a>
<br>4、办理开工许可证
<br>5、进场
<br>6、分部分项验收
<br>7、整体验收
<br>8、建委备案
<br>9、结算

1. 解决方法:我首先想到的是php 的 str_replace替换文字中的双引号;测试了不行;如果把微博中的单双引号分别替换成其他特殊字符串,像‘/’在url中经常替换成”%2F”一样,然后在通过js再替换回来,感觉应该可以,但是太麻烦;

2. 我想既然把用户的内容放到代码属性中很麻烦,而且有一定危险性(恶意脚本注入参考光光:代码编写中会遇到的安全性问题);于是,我单独加了一个标签元素来存储信息,然后通过参数传递这个标签元素的ID,这样问题就解决了
代码:

<span class="feed-inform-share">
            <span id="message-<?=$arResult["Post"]["ID"]?>" style="display:none;"><?=$arResult["Post"]["textFormated"]?></span>
            <a href="javascript:void(0);" id="blog-share-add-<?=$arResult["Post"]["ID"]?>" onclick="transMit('分享自//<?=CUser::FormatName($arParams["NAME_TEMPLATE"], $arTmpUser, ($arParams["SHOW_LOGIN"] != "N" ? true : false))?>:','message-<?=$arResult["Post"]["ID"]?>',event)"></a>
</span>
function transMit(value,id,evt){
    var e=(evt)?evt:window.event;  
    var body = document.getElementsByClassName("template-bitrix24")[0];
    var windowSize = BX.GetWindowInnerSize();
    var top = parseInt(windowSize.innerHeight*0.33);
    BX("transmit_box").style.top = top + 'px';
    BX.show(BX("transmit_box"));
    var mask = BX.create("DIV",
        {
            "attrs": {"id": "transmit_box_mask"},
            // "children":
            // [
            //  BX.create("SPAN",
            //  {
            //      "attrs": {"class": "bx-crm-edit-content-location-description"},
            //      "text": "<?= CUtil::JSEscape($arResult['PAY_SYSTEM_ID_TITLE']) ?>"
            //  })
            // ]
        }
    );
    body.appendChild(mask);
    if (window.event) {  
        e.cancelBubble=true;  
    } else {  
        //e.preventDefault();  
        e.stopPropagation();  
    } 
    BX("POST_MESSAGE").innerHTML = value+BX(id).innerHTML;
    BX.bind(BX("transmit_box_mask"),"click",function(){
    BX.hide(BX("transmit_box"));
    body.removeChild(BX("transmit_box_mask"));
}); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值