QA@IT

phpにおいて、正規表現を伴うfunctionの中のonclickイベントについて

4275 PV

下記の通り、文章中にurlの形式がある場合は、リンクを張り、そのリンクをクリックするとonclickイベントが呼び出され、アラートが発生する仕組みを作りたいのですが、うまくいきません。
(urlをクリックしても何も起こりません。)

原因と改善策について教えて頂けますでしょうか。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">

<title>テスト</title>
</head>

<body>

<?php

function makeLink($value) {
    return mb_ereg_replace("(https?)(://[[a-zA-Z0-9]\+\$\;\?\.%,!#~*/:@&=_-]+)", '<a href="#" onclick="alert($value);">\1\2</a>' , $value);
}

$text = 'こんにちは。http://yahoo.co.jp';

echo makeLink($text);

?>

</body>
</html>

回答

(https?)(://[[a-zA-Z0-9]\+\$\;\?\.%,!#~*/:@&=_-]+) では目的の URL がマッチしないように見えたのですが、これは意図した正規表現でしょうか?
それから、リンクの文字列がシングルクォートで囲まれているせいで、変数が展開できていないように見えます。

意図したのは こんな (かなりテキトウですが) 感じの動きでしょうか。
主に変更したのは以下の箇所です。ひとまず URL っぽいものにマッチするようにして、変数を展開できるようにしました。

(snip)

<?php

function makeLink($value) {
    return ereg_replace("(https?:\/\/[^\s]+)", "<a href=\"#\" onclick=\"alert('$value');\">\\1</a>" , $value);
}

(snip)

※ リンク先では mb_ereg_replace が使えなかったので少し変えています

編集 履歴 (1)

まず生成されているHTMLはあなたが望んでいるテキストになっていますか?

phpはサーバー上(Apacheなど)でHTMLテキストを作るまでが仕事です。

onclickイベントは(HTML上の)javascriptのものなのですでにphpの手を離れています。
そしてこの javascriptはクライアント(ブラウザ)で動きます。

ブラウザでページが表示されて、そこでソースを見たときに出来上がっているテキストが
あなたが望んでいるかものかどうかを確認してみてください。

期待したHTMLになっていなければ、phpのコードがおかしいです。
期待したHTMLになっていれば、javascriptが間違っています。

ソースはページ上で右クリックしてソースを表示などを選べば表示できると思います。

以前の質問でもどなたかが説明されていましたが、
タイトルを見るに phpとjavascriptの実行プロセスにまだ少し認識不足があるようなのでこういう回答にさせていただきました。

上記のコードでどういうアンカータグ(<a >~ </a>)になっていて欲しかったのかを補足してもらえると助かります。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。