fooleap / disqus-php-api

利用 PHP cURL 转发 Disqus API 请求
MIT License
303 stars 54 forks source link

修复包含链接和图片的评论被截断的问题 #30

Closed poplite closed 6 years ago

poplite commented 6 years ago

如果评论包含网页链接和图片,Disqus 评论框上显示的评论会被截断。

如图,评论从链接开始的地方截断:

原生评论框能够正常显示:

造成问题的相关代码: https://github.com/fooleap/disqus-php-api/blob/4a014e1ac98ce4eb5f59dcb96b3de04927866864/api/init.php#L318

看了一些资料,正则表达式中第二个.*?会匹配网页链接与图片链接之间的所有内容,然后匹配的内容被移除掉了。

重现代码:

<?php
$mesg = '<p>这是谷歌(<a href="https://www.google.com" target="_blank" title="https://www.google.com">https://www.google.com</a>)的 LOGO: <a href="https://uploads.disquscdn.com/images/af8490031b8fa919bfcd6b205e7bf8391e81c315af15c201520d3fabfa1e4bfb.jpg" target="_blank" title="https://uploads.disquscdn.c...">https://uploads.disquscdn.c...</a></p>';

$imgpat = '/<a(.*?)href="(.*?(disquscdn.com|media.giphy.com).*?\.(jpg|gif|png))"(.*?)>(.*?)<\/a>/i';
$mesg = preg_replace($imgpat, '', $mesg);
echo $mesg; // 输出:<p>这是谷歌(</p>
?>

修复后: