php+js 分享博客的功能

来源:互联网 发布:linux system 输出 编辑:程序博客网 时间:2024/06/15 19:55

一开始,我是这么做的,把要分享的博客内容放到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"));}); }
原创粉丝点击