转换一些unicode字符的htmlescape

时间:2016-04-27 06:21:57

标签: html perl unicode escaping

我在这里有一个问题,我使用perl通过输入文本框输入一些字符并保存到数据库中。在保存到数据库之前,所有值都将通过一个函数来运行escapeHTML。问题是这个escapeHTML函数正在将我的一些中文字符转换为HTML代码,如例2和3所示。我只是想知道为什么escapeHTML只影响一些unicode字符而不是全部?

希望有人可以帮助我。

谢谢

func doSomething(value: Int?) {
    switch value {
    //case 2:  // Not allowed
    case 2?:
        print("found two")

    case nil:
        print("found nil")

    case let x:
        print("found a different number: \(x)")
    }
}

1 个答案:

答案 0 :(得分:1)

HTML编码的首选方式是HTML::Entities

仅对默认的不安全字符进行编码:

$encoded = encode_entities($string);

编码<和>,但没有&和其他人:

$encoded = encode_entities($string,'<>');

编码非纯ASCII:

$encoded = encode_entities($input, '^\n\x20-\x25\x27-\x7e');

escapeHTML()不是CGI documentation的一部分,我认为它不是用于从CGI模块外部使用的。如果你看一下CGI源代码,它就会使用HTML :: Entities:

$ENCODE_ENTITIES     = q{&<>"'};
sub escapeHTML {
     require HTML::Entities;
     # hack to work around  earlier hacks
     push @_,$_[0] if @_==1 && $_[0] eq 'CGI';
     my ($self,$toencode,$newlinestoo) = CGI::self_or_default(@_);
     return undef unless defined($toencode);
     my $encode_entities = $ENCODE_ENTITIES;
     $encode_entities .= "\012\015" if ( $encode_entities && $newlinestoo );
     return HTML::Entities::encode_entities($toencode,$encode_entities);
}

看到这个源代码,我想知道它为什么会进行任何Unicode编码。