$content がテキストエリアのコンテンツであるとしましょう
/*Convert the http/https to link */
$content = preg_replace('!((https://|http://)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="$1">$1</a> ', nl2br($_POST['helpcontent'])." ");
/*Convert the www. to link prepending http://*/
$content = preg_replace('!((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$1">$1</a> ', $content." ");
これはリンクには問題なく機能していましたが、画像がテキスト内にあるとマークアップが壊れていることに気付きました...
私は今このようにしようとしています:
$content = preg_replace('!\s((https?://|http://)+[a-z0-9_./?=&-]+)!i', ' <a href="$1">$1</a> ', nl2br($_POST['content'])." ");
$content = preg_replace('!((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$1">$1</a> ', $content." ");
画像は尊重されますが、問題は http:// または https:// 形式の URL が現在変換されないことです..:
google.com -> 変換されません (予想どおり)
www.google.com -> コンバージョン率が高い
http://google.com -> 変換されません (予期しない)
https://google.com -> 変換されません (予期しない)
私は何が欠けていますか?
-編集-
現在のほとんど機能するソリューション:
$content = preg_replace('!(\s|^)((https?://)+[a-z0-9_./?=&-]+)!i', ' <a href="$2" target="_blank">$2</a> ', nl2br($_POST['content'])." ");
$content = preg_replace('!(\s|^)((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$2" target="_blank">$2</a> ', $content." ");
ここで重要なのは、これが入力の場合:
www.funcook.com http://www.funcook.com https://www.funcook.com funcook.com http://funcook.com https://funcook.com
必要なすべての URL (name.domain を除くすべて) は期待どおりに変換されますが、これは出力です
www.funcook.com http://www.funcook.com https://www.funcook.com ; funcook.com http://funcook.com https://funcook.com
に注意してください。が挿入されましたが、その理由は何ですか?