4

我需要替换 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();
4

1 回答 1

2

通过str_replacing输出缓冲区中的内容将php页面中的所有非ssl引用转换为ssl是一种好习惯吗?-->没有

这是因为您的页面实际上可能需要提供包含“http://”的内容,并且它们不一定是链接。我只是说有时您可能需要输出这些内容,并且由于 str_replace(),您的页面将无法输出它。

我有三个建议:

  1. 输出正确的链接。如果可能,请输出正确的链接(http 或 https),这样您就不需要替换它们。您可以通过使用返回是否应该使用 http 或 https 的常量或函数来做到这一点。
  2. 使用preg_replace以便您只替换某些标签中的文本,例如<a> <link> <img> <script>.
  3. 依靠服务器重定向。您可以将服务器设置为将所有 http 流量重定向到 https,这样您就不必担心更改链接。当他们访问 http 链接时,他们将被转发到 https 链接。您可以将以下内容放入.htaccess文件中:

.htaccess 文件:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
于 2012-09-15T15:44:28.170 回答