我有一个数据库表,其中包含以下行:“ id”,“ link”和“ name” 链接为:
<a href=\"https://www.sample.com/file1.php\">[1-200]< /a> <a href=\"https://www.sample.com/file2.php\">[201-224]< /a>
和名称:
item1
我有以下PHP代码从数据库中获取信息并将其返回给访问者。我的问题是file2.php的链接不仅被用作[201-224]的超级链接,而且该超链接也应用于其余页面内容。我该如何预防?并预先感谢。
echo "</br> ".$name= $row['name'];
echo "</br> ".$Torrentlink= preg_replace('/\\\\/', '',$row['Torrentlink']);
echo "</br> ";
echo "</br> ";echo "</br> ";
echo "the rest of my text goes here ";
答案 0 :(得分:1)
这是处理此类数据的一种糟糕方法。如果您知道它们都是链接,那么您应该只存储链接和名称(当然,id和其他元数据可能会有用)。您当前的状况会给您后面的工作人员带来太多错误和维护问题。如果您不想为每个链接创建记录,请考虑将它们存储为JSON或其他格式。
示例:(将JSON作为VARCHAR存储在数据库中
<?php
//Populate variable from DB
//$TorrentLinks = $row{'Torrentlink'};
$TorrentLinks = '[
{"url":"https://www.sample.com/file1.php","text":"[1-200]"},
{"url":"https://www.sample.com/file2.php","text":"[201-224]"}
]';
//Convert to array
$jsonLinks = json_decode($TorrentLinks,true);
//Iterate and print links
foreach ($jsonLinks as $key => $value) {
echo "<a href=\"{$value["url"]}\">{$value["text"]}</a><br />";
}
结果:
<a href="https://www.sample.com/file1.php">[1-200]</a>
<a href="https://www.sample.com/file2.php">[201-224]</a>
根据捕获数据的方式,还可以使用htmlspecialchars()之类的东西来阻止特殊字符的执行。
答案 1 :(得分:0)
我认为您的preg_replace('/\\\\/', '',$row['Torrentlink']);
/\\\\/
查找带有双反斜杠\\
的文本。看来您的意图是仅查找单个反斜杠以在链接中消除它们。
所以尝试用
替换它 preg_replace('/\\/', '',$row['Torrentlink']);
例如https://regexr.com/是检查正则表达式的好地方。
答案 2 :(得分:0)
错误只是输入的html文本。
问题是该行中的“ ”:
<a href=\"https://www.sample.com/file1.php\">[1-200]< /a> <a href=\"https://www.sample.com/file2.php\">[201-224]< /a>
反斜杠前有一个空格。