我正在使用聊天机器人脚本,如果用户名为test@test.com
,机器人将使用mailto链接回复@ <a href= mailto:test@test.com>test@test.com</a>
。我希望回复只有test@test.com
没有链接,我尝试了preg_replace
和str_replace
,但我真的不知道要使用的确切代码,我尝试了以下但没有工作!
$name = preg_replace('/<a href="([^<]*)">([^<]*)<\/a>/', '', $name);
我用于替换的整个代码是:
$name = str_replace (chr(0xc2).chr(0xa0), "_", $name);
$name = str_replace ("'", "", $name);
$name = str_replace (""", '"', $name);
$name = str_replace ("&", "&", $name);
$name = str_replace ("<", "", $name);
$name = str_replace (">", "", $name);
$name = str_replace ("&", "_", $name);
$name = str_replace ("*", "_", $name);
$name = preg_replace('/[^ \p{L}\p{N} \@ \_ \- \.\#\$\&\!]/u', '', $name);
$name = preg_replace('/<a href="([^<]*)">([^<]*)<\/a>/', '', $name);
答案 0 :(得分:1)
为什么要替换它?只需使用preg_match()和类似的正则表达式:
<a href=[^>]+>([^<]*)</a>
总的来说,你的代码看起来像这样
<?php
$regex = '#<a href=[^>]+>([^<]*)</a>#';
$email = '<a href= mailto:test@test.com>test@test.com</a>';
preg_match($regex, $email, $matches);
var_dump($matches[1]);
/*
output:
string(13) "test@test.com"
*/
?>
答案 1 :(得分:1)
上面的答案在做preg_replace时做了很多假设,所以不幸的是它会失败:(这就是为什么......
我不是说我的解决方案是100%安全的,但我已经在我知道的情况下对其进行了测试,我认为这是上述答案的升级!...
$email = preg_replace("/<a.+?href.+?>.+?<\/a>/is","",$email);
'i'修饰符使其不敏感 's'修饰符会考虑可能因换行符而中断的链接。
我总是建议使用不同格式,不同订单等不同链接填充字符串。这始终是测试工作的最佳方式。假设eveyone键入链接,因为我的测试会让你陷入许多棘手的情况:)
祝你好运!