我有一个字符串,可以通过函数encode_entities
进行解析。我需要保留双引号和单引号不被编码,所以我尝试用标志替换这些字符,然后在编码函数调用之后我们用双引号和单引号字符替换标志,未编码
这是我的策略:
// this is a value in the database
my $comment = "<br/>Test<br/>[url=#|onclick="printcoupon('3569')"]test comment[/url]";
$comment =~ s/"/[dq]/g;
$comment =~ s/'/[sq]/g;
$comment = encode_entities($comment);
if(index($comment,"onclick") != -1){
my $start = index($comment,"onclick=");
my $length = index($comment,"\"]");
my $newStr = substr($comment,$start,$length-$start+1);
$comment =~ s!\[url=(.+?)\](.+?)\[\/url\]!<a href="#" style="text-decoration:none;color:#336699" $newStr>$2</a>!g;
} else {
$comment =~ s!\[url=(.+?)\](.+?)\[\/url\]!<a href="$1" style="text-decoration:none;color:#336699">$2</a>!g;
}
$comment =~ s/\[dq\]/"/g;
$comment =~ s/\[sq\]/'/g;
此代码不起作用,但是我的策略。没有这些替换呼叫,最终结果是:
<a href="#" style="text-decoration:none;color:#336699" onclick="printcoupon('3569')>test comment</a>
什么时候应该
<a href="#" style="text-decoration:none;color:#336699" onclick="printcoupon('3569')">test comment</a>
此外,您可以看到printcoupon函数文本调用的结束双引号不存在
我需要帮助,因为我仍然是非常新的perl用户
更新
$comment =~ s/"/"/g;
$comment =~ s/'/'/g;
似乎工作但它仍然没有结束双引号
答案 0 :(得分:0)
可以重置转换表中的值(char2entity哈希)。
use HTML::Entities;
$HTML::Entities::char2entity{'\''} = '\'';
$HTML::Entities::char2entity{'"'} = '"';
my $comment = qq(<br/>Test<br/>[url=#|onclick="printcoupon('3569')"]test comment[/url]);
$comment = HTML::Entities::encode_entities( $comment);