这个片段有什么问题

时间:2010-08-27 15:02:21

标签: php javascript

<?php } elseif($_SOMETHING == 1 && $_ANOTHER_THING == 2) { ?>
<?php $_NAME = urlencode($_NAME); ?>
<?php $_MGT_NAME = urlencode($_MGT_NAME); ?>
</div>    
<?php } ?>

我预计会出现此错误';'

3 个答案:

答案 0 :(得分:5)

恐怖。恐怖。

以下是onclick属性值中的实际错误:

lpButtonCTTUrl = 'http:...Ad%20Source=somesite.com& ='+escape(document.location); imageUrl=<?php print "http://{$_SERVER['SITENAME']}/images/";?>&referrer

也就是说,在+'包含后应该有;而不是document.location,并且在包含imageURL之后应该有一个结束语,referrer是在错误的地方(它应该在document.location包含之前。

它也存在使用escape等问题(从不使用escape。对于URL编码,您实际上需要encodeURLComponent);遍布整个地方的未转动的&符号;并且缺少从PHP输出的值的HTML和URL编码,可能导致跨站点脚本风险。

在HTML内的属性值内的JavaScript字符串文字内的URL内部的URL组件中写入值是完全疯狂所以毫无疑问会出现错误。让我们试着为这种疯狂带来一些可维护性。将JavaScript和URL创建分解为单独的步骤,以便可以获得转义权。

function urlencodearray($a) {
    $o= array();
    foreach ($a as $k=>$v)
        array_push($o, rawurlencode($k).'='.rawurlencode($v));
    return implode('&', $o);
}
function h($s) {
    echo htmlspecialchars($s);
}

定义了这些实用程序功能,然后:

<?php } elseif($_SOMETHING == 1 && $_ANOTHER_THING == 2) { ?>
    <?php
        $lpbase= 'http://server.iad.liveperson.net/hc/84152841/?';
        $linkurl= $lpbase.urlencodearray(array(
            'cmd'=>'file',
            'file'=>'visitorWantsToChat',
            'site'=>'84152841',
            'byhref'=>'1',
            'skill'=>'somesiteILS',
            'SESSIONVAR!skill'=>'somesiteILS',
            'SESSIONVAR!Management Company'=>$_MGT_NAME,
            'SESSIONVAR!Community'=>$_NAME,
            'SESSIONVAR!Ad%20Source'=>'somesite.com',
            'imageUrl'=>"http://{$_SERVER['SITENAME']}/images/"
        ));
        $imgurl= $lpbase.urlencodearray(array(
            'cmd'=>'repstate',
            'site'=>'84152841',
            'channel'=>'web',
            'ver'=>'1',
            'skill'=>'somesiteILS',
            'imageUrl'=>"http://{$_SERVER['SITENAME']}/images/"
        ));
    ?>

    <div id="caller_tag">
        <a id="_lpChatBtn" target="chat84152841" href="<?php h($url); ?>">
            <img src="<?php h($imgurl); ?>" name="hcIcon" alt="Chat" border="0">
        </a>
        <script type="text/javascript">
            document.getElementById('_lpChatBtn').onclick= function() {
                var url= this.href+'&referrer='+encodeURIComponent(location.href);
                if ('lpAppendVisitorCookies' in window)
                    url= lpAppendVisitorCookies(url);
                if ('lpMTag' in window && 'addFirstPartyCookies' in lpMTag)
                    url= lpMTag.addFirstPartyCookies(url)
                window.open(url, this.target, 'width=475,height=400,resizable=yes');
                return false;
            };
        </script>
    </div>

答案 1 :(得分:4)

如果没有格式化的混乱,难怪你无法找到错误。

我尝试通过HTML Tidy运行它,但它不喜欢评论之间的任何内容。

mesite.com& ='+escape(document.location); imageUrl=<?php print "ht

我不擅长阅读那样的长行,但不应该是

mesite.com& ='+escape(document.location) +'imageUrl=<?php print "ht

答案 2 :(得分:2)

第一个:你为什么这么多次打开和关闭PHP,你可以这样写:

<?php
} elseif($_SOMETHING == 1 && $_ANOTHER_THING == 2) {
$_NAME = urlencode($_NAME);
$_MGT_NAME = urlencode($_MGT_NAME);
?>
<div id="caller_tag">
<!-- BEGIN LivePerson Button Code --><a id="_lpChatBtn"    href='http://server.iad.liveperson.net/hc/84152841/?cmd=file&file=visitorWantsToChat&site=84152841&byhref=1&SESSIONVAR!skill=somesiteILS&SESSIONVAR!Management%20Company=<?php print $_MGT_NAME; ?>&SESSIONVAR!Community=<?php print $_NAME; ?>&SESSIONVAR!Ad%20Source=somesite.com&imageUrl=<?php print "http://{$_SERVER['SITENAME']}/images/";?>' target='chat84152841'  onClick="lpButtonCTTUrl = 'http://server.iad.liveperson.net/hc/84152841/?cmd=file&file=visitorWantsToChat&site=84152841&SESSIONVAR!skill=somesiteILS&SESSIONVAR!Management%20Company=<?php print $_MGT_NAME; ?>&SESSIONVAR!Community=<?php print $_NAME; ?>&SESSIONVAR!Ad%20Source=somesite.com& ='+escape(document.location); imageUrl=<?php print "http://{$_SERVER['SITENAME']}/images/";?>&referrer lpButtonCTTUrl = (typeof(lpAppendVisitorCookies) != 'undefined' ? lpAppendVisitorCookies(lpButtonCTTUrl) : lpButtonCTTUrl); lpButtonCTTUrl = ((typeof(lpMTag)!='undefined' && typeof(lpMTag.addFirstPartyCookies)!='undefined')?lpMTag.addFirstPartyCookies(lpButtonCTTUrl):lpButtonCTTUrl);window.open(lpButtonCTTUrl,'chat84152841','width=475,height=400,resizable=yes');return false;" ><img src='http://server.iad.liveperson.net/hc/84152841/?cmd=repstate&site=84152841&channel=web&&ver=1&imageUrl=<?php print "http://{$_SERVER['SITENAME']}/images/";?>&skill=somesiteILS' name='hcIcon' alt='Chat Button' border=0></a><!-- END LivePerson Button code -->
</div>

并且:错误必须在其他地方,我看不到丢失的“;”在你粘贴的代码中使用php,除非错误是在javascript中。