使用blaze-html包,我想创建一些如下所示的html
<p> Some indented text我不知道如何创建不间断的空间。那么最好的方法是什么呢?
发布于 2013-01-11 14:30:40
当然,一种方法是将包含该字符的Haskell编码版本的字符串提供给toHtml。另一种方法是使用preEscapedToMarkup
preEscapedToMarkup " "发布于 2013-01-12 14:44:25
根据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正如我所希望的那样,这段代码在浏览器中显示了“一些缩进的文本”,但是查看html,我没有看到任何"@nbsp;",正如我所期望的。
感谢Jukka指出了更好的解决方案。
https://stackoverflow.com/questions/14272637
复制相似问题