我需要替换php的html输出中的所有非ssl引用.通过对输出缓冲区中的内容执行str_replace并将其刷新来实现它是一个好习惯吗?实际上在php代码中有很多包含和要求,所以通过找到每个引用的位置来实现它是非常繁琐的.是否有任何艰难而快速的方法来解决这个问题?这是我正在做的一个粗略的想法
<?php
ob_start();
// does the logic to generate output html.
$mixedHtml = ob_end_clean();
ob_start();
$finalHtml = str_replace('http:','https:',$mixedHtml);
echo $finalHtml;
ob_end_flush();
最佳答案 通过str_replacing输出缓冲区中的内容将所有非ssl引用转换为php页面中的ssl是一个好习惯吗? – >没有.
这是因为您的网页可能实际上需要提供包含“http://”的内容,而且它们不一定是链接.我只是说有时候你需要输出那些并且由于str_replace(),你的页面将无法输出它.
我有三个建议:
>输出正确的链接.如果可能,输出正确的链接(http或https),因此您无需替换它们.您可以通过使用常量或函数来返回是否应使用http或https.
>使用preg_replace,这样您就只能替换某些标签中的文字,例如< a> < LINK> < IMG> <脚本取代.
>依靠服务器重定向.您可以将服务器设置为将所有http流量重定向到https,这样您就不必担心更改链接.当他们访问http链接时,他们将被转发到https链接.您可以将以下内容放在.htaccess文件中:
.htaccess文件:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}