不同的行为

问题描述:

这是我用来与“#”字码在一开始可点击:不同的行为

$value = htmlentities($value, ENT_QUOTES, 'UTF-8'); 
preg_replace("/#([\pL\pN.]+)/u", "<span onclick='opn(event, ".$value.", \"\\1\");'>\\0</span>", $value); 

ENT_HTML5到第二个参数的结束htmlentities后:

htmlentities($value, ENT_QUOTES | ENT_HTML5, 'UTF-8') 

开头的“#”字不再可点击。为什么?

php> var_dump(htmlentities('#foo',ENT_QUOTES,'UTF-8')); 
string(4) "#foo" 
php> var_dump(htmlentities('#foo',ENT_QUOTES|ENT_HTML5,'UTF-8')); 
string(8) "&num;foo" 

希望这回答了你的问题:正则表达式不能取代你的文本,因为它不符合任何更多。

+0

那么在这种情况下我该怎么办?没有ENT_HTML5的情况与ENT_HTML5一样吗? – May

+0

改用['htmlspecialchars'](http://php.net/htmlspecialchars)? –

+0

我用str_replace(从&num;到#)颠倒了逃生,现在每件事情都很好。我希望这样做没有安全问题 – May