由于某些原因,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( '"', '"', $input);
$single = str_replace("'", "'", $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内容。我的网页中的下一个结束锚标记是一个链接。
答案 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);//= </a>
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( '"', '"', $input);
$single = str_replace("'", "'", $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]'));