为什么我会得到这个奇怪的“ ”换行符?

Why am I getting this weird “​” line break?

有人提出(并回答)了类似的问题,但没有关于如何修复它的答案/解决方案

我正在为我的 Phonegap 项目使用 jQuery Mobile / Handlebars。到目前为止,一切似乎都运行良好。但突然间我得到了这个奇怪的换行符:

"​                               "

我使用以下代码制作列表:

    // HTML
    <ul id="guideListView" data-role="listview" ></ul>

    <script id="guideListTemplate" type="text/x-handlebars-template">​
        {{#if this}}
            {{#each this}}
            <li class="guide">
                <a href="{{guideUrl}}{{id}}" data-transition="slide" class="ui-nodisc-icon" >
                    <div class="name">{{name}}</div>
                    <div class="num-stores-container no-bold small">Stores: <span class="num-stores">{{storesCount}}</span></div>
                </a>
            </li>
            {{/each}}
        {{else}}
            <li class="ui-btn">Sorry, no guides for <span class="city"></span></li>
    {{/if}}
    </script>

    // JS
    var template = Handlebars.compile($("#guideListTemplate").html());
    $('#guideListView').append(template(guides));
    $('#guideListView').listview().listview('refresh');

有人知道是什么原因造成的吗?

已更新
我试过使用 ("#guideListTemplate").html().trim()$('#guideListView').html(template(guides));,但这没有任何区别。这在 jQuery Mobile 中会很重要吗?

再调试一下,看来问题可能出在这里:

<script id="guideListTemplate" type="text/x-handlebars-template">​

好的,所以我找到了解决方案 from this thread

问题是当您尝试获取 javascript 字符串的 html 时,您可能会得到 zero width space

Unicode 具有以下零宽度字符:

  • U+200B 零宽度space
  • U+200C 零宽度非连接器 Unicode 代码点
  • U+200D 零宽度连接符 Unicode 代码点
  • U+FEFF 零宽度不间断space Unicode 代码点

为了解决我的问题,我使用正则表达式删除了 unicode 字符:

var source = $("#guideListTemplate").html().replace(/[\u200B]/g, '');

我刚刚遇到了同样的问题并找到了解决方案。问题源于我们将 www 中的片段复制粘贴到我们的编辑器中,有时它会导致像 space 这样的字符被复制为数字实体。编辑器解析实体,所以一切看起来都很普通。解决方案是找到一种方法来突出数字实体(如果它不是内置在您的编辑器中,请寻找扩展名)并删除它。 Regex/replace 不是解决方案

我遇到的问题是 Handlebar 模板是使用文件编码 "UTF-8 with BOM" 保存的。但是需要保存为"UTF-8 without BOM".

如果您使用的是像 Webstorm 这样的 Jetbrains IDE,只需右键单击该文件并单击 "Remove BOM"。

您可以在此处详细了解这两者之间的区别:What's different between UTF-8 and UTF-8 without BOM?