Разделить ссылку от запятой пробелом
Есть сайт на WordPress. Есть кастомная форма комментариев. При написании комментария, если пользователь сразу после ссылки поставит любой знак препинания (, или . или ! и тд.), то при публикации знак препинания станет частью ссылки, и естественно ссылка будет не рабочей. Можно ли как-то устранить проблему? Приведу часть кода:
<div class="comment">
<?php
if (!empty($comment_html)) {
$m = '|([\w\d]*)\s?(https?://([\d\w\.-]+\.[\w\.]{2,6})[^\s\]\[\<\>]*/?)|i';
$r = '<noindex><a href="$0" target="_blank" rel="nofollow">$0</a></noindex>';
$comment_html = preg_replace($m, $r, $comment_html);
}
if (empty($comment_html)) {
$m = '|([\w\d]*)\s?(https?://([\d\w\.-]+\.[\w\.]{2,6})[^\s\]\[\<\>]*/?)|i';
$r = '<noindex><a href="$0" target="_blank" rel="nofollow">$0</a></noindex>';
$comment_html = preg_replace($m, $r, $comment->comment_content);
}
if ($comment_html == "Комментарий удален.") {
echo '<span>' . $comment_html . '</span>';
} else {
echo $comment_html;
}
?>
</div>
Ответы (1 шт):
Автор решения: HMRDevil
→ Ссылка
Подправьте регулярное выражение. Замените строку
$m = '|([\w\d]*)\s?(https?://([\d\w\.-]+\.[\w\.]{2,6})[^\s\]\[\<\>]*/?)|i';
на
$m = '|(https?://([\d\w\.-]+\.[\w\.]{2,6})[^\s\W\D]*/?)|i';