为什么我会得到这个奇怪的“ ”换行符?
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?
有人提出(并回答)了类似的问题,但没有关于如何修复它的答案/解决方案
我正在为我的 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?