我正在尝试使用以下perl行,如下所述:Does anyone know of a vim plugin or script to convert special characters to their corresponding HTML entities? - 在Vim中对HTML实体进行编码。
%!perl -p -i -e 'BEGIN { use HTML::Entities; use Encode; } $_=Encode::decode_utf8($_) unless Encode::is_utf8($_); $_=Encode::encode("ascii", $_, sub{HTML::Entities::encode_entities(chr shift)});'
它的工作正常(英镑和英镑,弯曲的报价等)除了它自己的&符号外 - & - 保持不变。
我尝试删除uf8解码,并查看了HTML :: Entities的CPAN文档。
答案:
@ZyX回答了原来的问题,但正如其他人在评论中指出的那样,这是多余的,因为如果你使用UTF-8字符集(我是,两者都带有元标记 -
<meta charset="utf-8">
以及Apache配置:
AddDefaultCharset utf-8
事实上,在这种情况下添加它们可能是件坏事;如果想要使用源代码,文件大小更大,文本被混淆。
您必须确保用于创建文件的编辑器也以UTF-8编写它们。
答案 0 :(得分:2)
我的回答是只编码高于ascii范围的字符。如果要将某些内容编码为html,则应使用
$text=HTML::Entities::encode_entities($text);
%!perl -MHTML::Entities -MEncode -p -i -e '$_=Encode::decode_utf8($_) unless Encode::is_utf8($_); $_=HTML::Entities::encode_entities($_);'
我没有在那个答案中使用这个,因为TS只要求编码unicode字符而不编码<
,>
,&
。
顺便说一句,您可以使用$text=HTML::Entities::encode_entities($text, '<>&"');
仅对非常不安全的字符进行编码(尽管我猜这很容易用vimscript表示:
:let entities={'<': 'lt', '>': 'gt', '&': 'amp', '"': 'quot'}
:execute '%s/['.escape(join(keys(entities), ''), '\-]^').']/\="&".entities[submatch(0)].";"/g'
答案 1 :(得分:-1)
perl -MHTML::Entities -i -e 'print encode_entities shift'
应该有效,不是吗?