免责声明:我是榆树的新手
我正在摆弄在线榆树编辑器,我遇到了一个问题。我找不到让某些特殊字符(版权,商标等)出现的方法。我试过了:
import Html exposing (text)
main =
text "©"
显示的只是实际文字©
。我也尝试使用unicode字符\u00A9
,但最终给我一个语法错误:
(line 1, column 16): unexpected "u" expecting space, "&" or escape code
我找到的唯一方法是实际访问某人的网站并将其版权符号复制/粘贴到我的应用中:
import Html exposing (text)
main =
text "©"
这很有效,但我宁愿能够快速输入这些字符,而不必去寻找其他网站上的实际符号。在Elm中返回HTML时是否有首选/推荐的获取非转义文本的方法?
修改
专门针对Mac:
©
™
®
所有测试都在在线编辑器中进行了测试。这仍然没有攻击核心问题,但对于这些特定的特殊字符来说,这只是一件好事。
答案 0 :(得分:17)
为什么会这样(故意)不那么容易
榆树的“制造者”不愿意给我们提供一种在HTML文本中插入“特殊”字符的方法。两个主要原因:
无论如何可能
也就是说,榆树用户社区已找到一个漏洞,可以提供解决方法。由于上述原因,不建议使用尤其,如果您的文本不是常量,即来自程序外部的来源。尽管如此,人们仍然希望这样做,所以我要记录它以拯救其他人我在挖掘所有东西并让它工作的麻烦:
import Json.Encode exposing (string)
elm-lang/core
包中,因此它应该已经存在于您的依赖项中。import Html.Attributes exposing (property)
property "innerHTML"
和您文本的JSON-Value表示,例如:
span [ property "innerHTML" (string " ") ] []
答案 1 :(得分:9)
我发现,有一个更好的解决方案: 您可以将特殊字符从Unicode转换为char,然后从char:
创建一个字符串resString = String.fromChar (Char.fromCode 187)
答案 2 :(得分:7)
您可以在Elm字符串和字符中直接使用Unicode转义代码:
我们有一个util模块,其中包含我们所有的特殊字符,例如:
module Utils.SpecialChars exposing (noBreakSpace)
noBreakSpace : Char
noBreakSpace = '\x00A0'
可以用作:
let
emptyLabel = String.fromChar noBreakSpace
in
label []
[ span [ ] [ text emptyLabel ]
]
这将呈现<span> </span>
答案 3 :(得分:3)
我最近创建了一个解决此问题的Elm package。如果您使用text' "©"
,它将呈现版权符号©而不是转义码。也适用于"©"
和"©"
。希望这有帮助!
答案 4 :(得分:2)
您无需搜寻符号,您可以从this one这样的列表中获取符号。
如果复制和复制太麻烦了粘贴,您还可以创建一个帮助函数,您可以使用转义字符,如下所示:
import Html exposing (..)
import String
htmlDecode str =
let
replace (s1, s2) src= String.join s2 <| String.split s1 src
chrmap =
[ ("®", "®")
, ("©", "©" )
]
in
List.foldl replace str chrmap
main = text <| htmlDecode "hello ©"