使用blaze html,如何在html中创建前导非中断空格

使用blaze html,如何在html中创建前导非中断空格,html,haskell,Html,Haskell,使用blaze html包,我想创建一些如下所示的html <p>&nbsp;&nbsp;Some indented text 一些缩进文本 我不知道如何创建不间断的空间。最好的方法是什么?当然,一种方法是将包含该字符的Haskell编码版本的字符串赋给到HTML。另一种方法是使用preEscapedToMarkup: preEscapedToMarkup "&nbsp;" 按照ertes的建议,我尝试“给出一个包含Haskell编码的字符版本的字符串”

使用blaze html包,我想创建一些如下所示的html

<p>&nbsp;&nbsp;Some indented text
一些缩进文本

我不知道如何创建不间断的空间。最好的方法是什么?

当然,一种方法是将包含该字符的Haskell编码版本的字符串赋给
到HTML
。另一种方法是使用
preEscapedToMarkup

preEscapedToMarkup "&nbsp;"

按照ertes的建议,我尝试“给出一个包含Haskell编码的字符版本的字符串”。这段代码非常冗长,因此我可以更好地理解这些类型是如何组合在一起的

{-# LANGUAGE OverloadedStrings #-}

-- * base
import Data.Monoid ((<>))
import Data.Char (chr)

-- * text
import qualified Data.Text.Lazy as L (Text)
import Data.Text (Text, singleton)
import Data.Text.Lazy.Read (hexadecimal)

-- * blaze-html
import Text.Blaze.Html5
import qualified Text.Blaze.Html5 as H
import Text.Blaze.Renderer.String


nbspHex = "00A0"               :: L.Text -- Unicode codepoint for nbsp
Right (nbspInt, _) = hexadecimal nbspHex
nbspChar = chr nbspInt         :: Char
nbspTxt  = singleton nbspChar  :: Text
nbspHtml = toHtml nbspTxt      :: Html

someHtml ::  Html
someHtml = docTypeHtml $
  body $ do
    p "some text"
    p (nbspHtml <> nbspHtml <> "some indented text")

main :: IO ()
main = do
  let s = renderHtml $ someHtml
  putStrLn s
{-#语言重载字符串}
--*基地
导入数据。Monoid(())
导入Data.Char(chr)
--*文本
将限定的Data.Text.Lazy导入为L(文本)
导入数据.Text(文本,单例)
导入Data.Text.Lazy.Read(十六进制)
--*blaze html
导入Text.Blaze.Html5
将限定的Text.Blaze.Html5作为H导入
导入Text.Blaze.Renderer.String
nbspHex=“00A0”::L.Text——nbsp的Unicode代码点
右(nbspInt,ux)=十六进制nbspHex
nbspChar=chr nbspInt::Char
nbspTxt=单例nbspChar::Text
nbspHtml=toHtml nbspTxt::Html
someHtml::Html
someHtml=docTypeHtml$
body$do
p“一些文本”
p(nbspHtml nbspHtml“某些缩进文本”)
main::IO()
main=do
设s=renderHtml$someHtml
putStrLn s
正如我所希望的,这段代码在浏览器中显示了“一些缩进文本”,但查看html时,我没有看到任何“@nbsp;”,正如我所期望的那样。所以这不是我想要的答案


感谢Jukka指出了一个更好的解决方案。

显而易见的解决方案怎么不起作用?为什么你会要求最好的方法来做错误的事情?更好的问题是如何将第一行缩进(CSS属性
文本缩进
)添加到文本块。@Mechanicalsnail我尝试了几种“显而易见”(至少对我来说)的解决方案,但都不起作用。它们几乎都以“”显示在浏览器中而告终。@JukkaK.Korpela感谢您的指针。是的,通过进一步阅读,我发现文本缩进是首选的解决方案。出于某种原因,我仍然试图找出错误的解决方案,可能是出于固执,也可能是因为我认为有一天我可能会想在html中插入其他类型的“&blah;”符号。据我所知,preEscapedToMarkup是blaze标记的一部分,而不是blaze html。事实上,我不知道blase markup和blaze html之间有什么区别,也不知道它们之间的关系。我还尝试过“给出一个包含该字符的Haskell编码版本的字符串”,这很有效,但不是我预期的方式。我将在回答这个问题时展示这些代码。@Tad:blaze标记提供了一般组合符,blaze html提供了各种标准(html4、html5..)的实际标记和属性