【问题标题】:how to get the width of a string in a specific font?如何获取特定字体的字符串宽度?
【发布时间】:2015-12-30 08:15:53
【问题描述】:

我正在我的 Django 应用程序中进行问答测试,并向用户提示寻求的答案,我希望输入字段具有与预期答案字符串相同的 width

目前我正在做的是:

  • 后端,改组答案:

    width = ''.join(random.sample(answer,len(answer)))
    
  • 前端,当我的 ajax 请求成功时:

    $('#inputNotDisplayed').text(data.width);
    // put the answer string in a hidden div that has
    // the same css characteristics as my answer receiver input (font-size, font-family...)
    $('#answerInput').width($('#inputNotDisplayed').width()).focus();
    // give its width to the visible input that is meant to received the answer
    // and give the focus to the input
    $('#inputNotDisplayed').remove();  
    

它工作得很好,但它有一个主要缺陷:您可以通过检查接收到的数据很容易地得到改组的字符串。

我看到的另一个选项是,当 Q 和 A 数据存储在数据库中时,我可以计算答案的宽度,以便在提出问题时产生它,但是如果我更改我想使用的字体或它的大小 ?

有没有办法知道特定字体的每个字符大小的宽度,是否可以在后端使用?还有什么想法吗?

另外,我没有使用等宽字体,我不想;)。

【问题讨论】:

  • 用星星或其他符号来表示有多少个字符会不会更容易?
  • 由于许多原因,您无法可靠地预先计算字符串的像素宽度。为什么你害怕你的用户偷看你的 JavaScript / XHR?那是某种敏感数据吗? (好像不是)
  • @StaceyBurns,肯定会更容易,但出于某种设计原因,它不是一个选项。
  • 就我个人而言,我根本不认为这是一个问题,再说一遍,它是唯一可靠的方法......(其他然后在天空中通过箍,测量每个字母组合和计算)
  • 没有简单的、仅限后端的解决方案,因为字符长度取决于用户浏览器、操作系统以及系统中是否打开了任何字体抗锯齿功能(以及哪个)。

标签: javascript jquery python css django


【解决方案1】:

如果您不想将字谜发送给用户,您可以使用单型字体或至少使用某些字符长度的字体(例如,所有细长字母具有相同宽度的字体,所有中型字母将具有相同的宽度,并且所有宽字母将具有相同的精确宽度)。完成后,您可以将随机字符串中的某些字符替换为等效的宽度字符。

【讨论】:

  • 我用你的评论编辑了答案,因为如果你知道一些不是等宽字体但使用你提到的几个不同长度的字体,我可以理解为什么我不能做后端答案,您可以将它们添加到答案中吗?谢谢
猜你喜欢
  • 2015-12-14
  • 2010-11-22
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多