浏览器中会出现一些不在代码中的文本

时间:2014-09-01 08:54:12

标签: php button printf

这是输出:

在推文按钮后看到该文字?它太烦人了,它应该在那里但是......是的,它就在那里。的xD

enter image description here

来自Google Chrome调试器的scren捕获。

enter image description here

它发生在这里的某个地方。

echo sprintf('<a id="share" target="_blank" data-count="%d" title="Share on Twitter" href="http://twitter.com/share?text=%s&url=%s" class="btn btn-counter" rel="nofollow">%s</a>​​​​​', $tweets, $text, $url, $placeholder);

这里是完整的PHP代码:

<?php 
        function get_tweets($url){
            $api = "http://urls.api.twitter.com/1/urls/count.json?url=";

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
            curl_setopt($ch, CURLOPT_URL, $api.$url);
            $result = json_decode(curl_exec($ch));

            return $result->count;
        }

        function tweet($url, $text = '', $placeholder = 'Tweet'){
            $text   = urlencode($text);
            $url    = urlencode($url);
            $tweets = get_tweets($url);
            echo sprintf('<a id="share" target="_blank" data-count="%d" title="Share on Twitter" href="http://twitter.com/share?text=%s&url=%s" class="btn btn-counter" rel="nofollow">%s</a>​​​​​', $tweets, $text, $url, $placeholder);
        }

        tweet('https://www.youtube.com/watch?v=[url]', 'The most beautiful story.');
    ?>

这里有超级完整的代码:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">


#share{
            text-decoration: none;
            color: #fff;
            width: 200px;
            height: 50px;
            background-color: #7fad33;
            border-radius: 3px;
            padding: 10px;
        }

</style>

<script type="text/javascript">
    function popupwindow(url, title, w, h) {
        var sheight = window.innerHeight || document.body.clientHeight;
        var swidth = window.innerWidth || document.body.clientWidth;
        var left = (swidth/2)-(w/2);
        var top = (sheight/2)-(h/2);
        return window.open(url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left);
    } 
</script>
</head>
<body>
    <center>
        <a id="share" class="facebook" target="_blank" onclick="return !popupwindow(this.href, 'Facebook', '640', '300')" href="http://www.facebook.com/sharer/sharer.php?u=https://www.youtube.com/watch?v=ZO1klxIbUfA">Share</a>
    <?php 
        function get_tweets($url){
            $api = "http://urls.api.twitter.com/1/urls/count.json?url=";

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
            curl_setopt($ch, CURLOPT_URL, $api.$url);
            $result = json_decode(curl_exec($ch));

            return $result->count;
        }

        function tweet($url, $text = '', $placeholder = 'Tweet'){
            $text   = urlencode($text);
            $url    = urlencode($url);
            $tweets = get_tweets($url);
            echo sprintf('<a id="share" target="_blank" data-count="%d" title="Share on Twitter" href="http://twitter.com/share?text=%s&url=%s" class="btn btn-counter" rel="nofollow">%s</a>​​​​​', $tweets, $text, $url, $placeholder);
        }

        tweet('https://www.youtube.com/watch?v=[url]', 'The most beautiful story.');
    ?>
</center>

1 个答案:

答案 0 :(得分:2)

您的源代码在某处有一堆不可见的字符。我的第一个猜测是:

        tweet('https://www.youtube.com/watch?v=[url]', 'The most beautiful story.');
    ?>
^^^^-- HERE

但很明显,在您的代码中很难找到它们,因为当您在编辑器中查看它们时,这些字符可能是不可见的。

线索是角色本身。我的猜测是因为你的HTML中没有<meta charset="UTF-8" />标题,你的浏览器会解释标准拉丁字符集中的字节。在这种情况下,有问题的字节是

226 (0xE2): â
128 (0x80): €
139 (0x8B): ‹

我猜测这些是UTF-8编码中构成Zero-Width Space的字节值并非巧合。

我认为,基本上,在您的来源的某个地方,您可以通过某种方式获得一些粘贴的内容。因为它们是零宽度空间,所以你无法在编辑器中看到它们(它们将被设置为正确显示这些UTF-8代码,作为零宽度空间,因此使它们不可见。)但是当你将它们渲染为HTML时,因为你使用的是非UTF-8编码(由于没有字符集元),它们就会显示为这些字节的拉丁字符解释,而不是零宽度空间。

你可以解决&#34;通过为输出设置正确的UTF-8字符集,您在评论中提到的问题,但请记住,仍然有一些字符您不希望输出。你现在无法看到。最好的办法是在某种编辑器中搜索源代码,以便查看这些字符的来源并删除它们。

你或许能够看到&#34;通过使用左/右箭头键将光标移动到文档的可疑部分,在普通编辑器中使用它们 - 在大多数编辑器中,零宽度空间仍然需要点击箭头键才能移过,即使它已经过去了。实际上并没有在屏幕上显示。