如何加密PHP变量(链接)?

Hug*_*ier 2 php encryption variables url encode

我需要帮助编码链接.基本上,在完成事件后,我运行一个将用户重定向到链接的功能.该链接直接来自PHP变量.

<?php 

$url = "http://google.com/";
$mylink = "<a href=\"" . $url . "\">";

echo $mylink;

?>
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何在没有源代码中显示的$ url的情况下回显$ mylink.我希望我的链接的输出仍然是$ url,但是在我的源代码中没有显示$ url ANYWHERE的值.

我怎样才能做到这一点?

hac*_*ist 6

这是一种确定的方法:您可以在数据库(或服务器上的文件)中存储链接和ID.而不是实际的URL,打印到您编写的PHP脚本的链接,该脚本传入该ID.您编写的此页面只会查找关联的ID并使用标头重定向到该链接.

例如:你编写一个脚本redirector.php然后页面源中的链接指向"redirector.php?id = 10293".重定向器脚本查找id为10293的内容,然后查看http://www.example.com然后调用

header('Location: http://www.example.com/');
Run Code Online (Sandbox Code Playgroud)

这样,链接仅在服务器端,并且永远不会显示在源代码中.正如用户pst在评论中建议的那样,你也可以使用类似tinyurl的东西,它在同一个主体上运行.

任何其他方法将依赖于某种加密,这种加密可以被解密,因为实际数据(链接URL)在页面源中虽然是模糊的.

编辑:这是一个如何写你的两个脚本的例子 - 打印网址和重定向的脚本.假设你的MySQL数据库中存在一个表url,添加一个名为'hash'或'id'的列,或者在脚本中打印url添加行:

$hash = sha1($url);
mysql_query("UPDATE url_table SET hash = '$hash' WHERE url = '$url'");
$printURL = "../redirect.php?id=$hash";
print "<a href='$printURL'>click me to go somewhere you don't know yet</a>";
Run Code Online (Sandbox Code Playgroud)

现在在另一个名为redirect.php的文件中输入以下代码:

<?php
//connect to db or include files
$givenHash = $_REQUEST['id']; $realURL = $_SERVER['HTTP_REFERER'];
$result = mysql_query("SELECT url FROM url_table WHERE hash = '$givenHash'"); 
while($row=mysql_fetch_assoc($result)) {
   $realURL = $row['url'];
}
header("Location: $realURL");
?>
Run Code Online (Sandbox Code Playgroud)

如果在数据库中找到它,则将它们发送到您想要的URL,或者在它们单击链接之前将它们放回到它们所在的页面.如果您只有一些事先已知的链接,那么只需使用查找数组就可以在不使用数据库的情况下完成此操作.希望这可以帮助.