str_replace不适用于斜杠

时间:2013-02-06 20:06:23

标签: php regex escaping anchor str-replace

由于某些原因,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>,但是,众所周知,这不会正确关闭锚标记,因此会在{和{{1}}之间生成所有html内容。我的网页中的下一个结束锚标记是一个链接。

2 个答案:

答案 0 :(得分:4)

您可能希望沿着正则表达式路线前进。

function make_link($link){
    return preg_replace('/\[{(.*?)}(.*?)\]/i', '<a href="$1">$2</a>', $link);
}

答案 1 :(得分: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]'));