在我从mysql数据库的文本字段中检索html标签后,显示html标签时遇到了一些问题。
我的代码看起来像这样:
<div class='textDiv'><? echo htmlspecialchars_decode(str_replace("\r\n", "<br>", $row["textField"]), ENT_NOQUOTES);?></div>
因此,当mysql中的文本字段只有纯文本时,一切都很好,但是当我在文本中添加一个链接时,我在链接标记之前和之后得到一个换行符,并且显示的文本变成了这一行: / p>
Some text justified over the div, then a sudden break
text with link to source
then the text continues justified as normal
但是,脚本生成的HTML代码如下:
<div class="textDiv">Senior Advisor said in a <a href="test.html">media interview</a> that the overall monetary policy tone is shifting towards...</div>
你们有没有想过为什么会发生这种情况以及如何解决这个问题?这样文本显示顺畅,没有换行符?
答案 0 :(得分:0)
使用htmlspecialchars_decode
时,所有文本的html都被解码,所以如果你想保留解码功能
1)将链接更改为普通链接的外观,例如:yourwebsite.com/test.html不添加标记
2)不要直接回复字符串
$text = htmlspecialchars_decode(str_replace("\r\n", "<br>", $row["textField"]);
3)然后将变量$ text传递给代码以检测链接,这里有一个: -
$reg_exUrl = '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.\,]*(\?\S+)?)?)*)@';
if(preg_match($reg_exUrl, $text, $url)) {
echo preg_replace($reg_exUrl, '<a href="https://'.$url[0].'" rel="nofollow">'.$url[0].'</a>', $text);
}
else
{
echo $text;
}
您可以更改代码以根据需要进行调整