零宽度的空间使HTML链接不可点击

时间:2018-10-12 23:17:14

标签: javascript html django unicode zero-width-space

我正在根据用户为该页面命名的名称来创建该页面的链接。但是,如果名称为零宽度空格,则该链接不可单击。

如何阻止用户为页面提供不可点击的名称?如果可能,我想允许使用Unicode字符。

通过Django表单将名称输入数据库,并在jQuery中构建HTML链接。 Django抱怨名称是否为常规空格,但接受零宽度的空格。

var linkText1 = 'foo', linkText2 = '\u200b';
$('#ex1')
  .append($('<a>')
  .text(linkText1)
  .attr('href', 'javascript:alert("clicked.")'));
$('#ex2')
  .append($('<a>')
  .text(linkText2)
  .attr('href', 'javascript:alert("clicked.")'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="ex1">Example 1 </p>
<p id="ex2">Example 2 </p>

2 个答案:

答案 0 :(得分:1)

检测零维特空间并将其替换为空或空空间。然后,在创建链接时,请跳过该文本(如果为null,则不显示任何链接),或显示默认链接文本,例如“ Click Here”。

这里有一些代码可以检测零宽度空间并将其替换为空字符串:

linkText2 = linkText2.replace(/\u200B/g,'');

如果给定为空,我们在此处设置默认值:

linkText2 = (linkText2 == '') ? "Click Here" : linkText2;

答案 1 :(得分:0)

Nawed's answerdevdob's comments的启发,当链接文本不包含任何字母或数字时,我决定添加一个后缀。这样可以避免损坏任何有用的Unicode文本,但应始终提供可用的链接。

不幸的是,它对Unicode并不明智。例如,中文单词将始终带有链接后缀。

一些改进的选择:

  1. 查找所有不可见的Unicode字符的列表,并明确查找它们。我担心将来会添加新的不可见Unicode字符。
  2. 列出更多blocks of visible Unicode characters以外的拉丁字母和数字。这似乎是最好的选择,但是我认为只要没有Unicode名称,我的应用程序就可以了。

function addLink($p, linkText) {
  if ( ! /\w/u.test(linkText)) {
    linkText += ' [link]';
  }
  $p.append($('<a>')
    .text(linkText)
    .attr('href', 'javascript:alert("clicked.")'));
}
var linkText1 = 'foo', linkText2 = '\u200b', linkText3 = '网站';
addLink($('#ex1'), linkText1);
addLink($('#ex2'), linkText2);
addLink($('#ex3'), linkText3);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="ex1">Example 1 </p>
<p id="ex2">Example 2 </p>
<p id="ex3">Example 3 </p>