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>,但是,众所周知,这不会正确关闭锚标记,因此会使{我网页中的和下一个关闭锚标记之间的所有 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

我个人建议下面的 Marcus Recck 的 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 回答