1

何らかの理由で。str_replace()では機能しません/。作成しているブログCMSの入力フォームとテキストエリアフォームで独自のリンクスタイルを受け入れる関数を作成しています。たとえば、を通過[{http://brannondorsey.com}My Website]するとに変換されます。これが私のコードです:<a href='http://brannondorsey.com'>My Website</a>make_link($string);

function make_link($input){

 $double = str_replace( '"', '&#34', $input);
 $single = str_replace("'", "&#39", $double);
 $bracket_erase = str_replace('[', "", $single);
 $link_open = str_replace('{', '<a href="', $bracket_erase);
 $link_close = str_replace("}", ">", $link_open);
 $link_value = str_replace(']', "</a>", $link_close);

 echo $link_value;
 }

]に置き換えられないことを除いて、すべてが正しく機能し</a>ます。スラッシュを削除すると、正常に置き換え]られ<a>ますが、ご存知のとおり、アンカータグは適切に閉じられないため{、Webページの次の閉じるアンカータグとの間のすべてのhtmlコンテンツがリンクになります。

4

2 に答える 2

4

このために正規表現ルートをたどることができます。

function make_link($link){
    return preg_replace('/\[{(.*?)}(.*?)\]/i', '<a href="$1">$2</a>', $link);
}
于 2013-02-06T20:11:55.533 に答える
1

私は個人的に、ここで私のものではなく、以下のマーカス・レックのpreg_replaceの答えを提案します。

ブラウザにhtmlが表示されないため、表示されませんが、以下を使用して表示したり、ブラウザのソース表示オプションを使用したりできます。

$link_close ="]";

$link_value = str_replace(']', "</a>", $link_close);

echo htmlspecialchars($link_value);//= &lt;/a&gt;

var_dump ($link_value); //=string(4) "" [invisible due to browser, but the 4 tells you its there]

OPの機能の最終バージョン:

function make_link($input){

 $double = str_replace( '"', '&#34', $input);
 $single = str_replace("'", "&#39", $double);
 $bracket_erase = str_replace('[', "", $single);
 $link_open = str_replace('{', '<a href="', $bracket_erase);
 $link_close = str_replace("}", '">', $link_open);
 $link_value = str_replace(']', "</a>", $link_close);

 return $link_value;
 }
echo htmlspecialchars(make_link('[{http://brannondorsey.com}My Website]'));
于 2013-02-06T20:15:24.943 に答える