2011-03-13 36 views
13

Estoy tratando de encontrar la manera de agregar s después de HTTP una vez que un usuario marca un recuadro en el formulario html.PHP - reemplace http con https en la URL

que tengo en mi PHP,

$url = 'http://google.com'; 

if(!isset($_POST['https'])) { 
    //something here 
} 

Así que, básicamente, cuando el usuario comprueba una caja con el nombre = "https" Quiero añadir a http s $ url de lo que es https://google.com.

Tengo poco conocimiento sobre PHP y si alguien me puede explicar cómo hacerlo, ¡esto sería realmente útil! Gracias.

Respuesta

2

Una manera:

$url = '%s//google.com'; 
$protocol = 'http:'; 

if(!isset($_POST['https'])) { 
    $protocol = 'https:'; 
} 

$url = sprintf($url, $protocol); 
+0

gracias por el código, pero no puedo romper la $ url porque está siendo utilizado en una anterior función que requiere la url completa. ¿Habría otra forma de hacerlo? –

+0

@ usr122212: Vea la respuesta de @ edorian. –

50
$url = preg_replace("/^http:/i", "https:", $url); 
+1

buena solución, pero es mejor para mayúsculas y minúsculas: '$ url = preg_replace ("/^ http:/i "," https: ", $ url);' –

+1

probé esta solución, desafortunadamente esto no funcionaba , probé la siguiente solución con "str_replace" y obtuve el resultado. – Mimouni

1

no sé de cuántas páginas desea que esto suceda en adelante el usuario comprueba la caja, pero una respuesta es JavaScript y la etiqueta base.

Con la etiqueta base, puede forzar un origen diferente, con lo que se resolverán sus URL relativas.

que se está utilizando la forma ina, y el usuario garrapatas la casilla ellos sumbits forma, todas las demás páginas se pueden ver desde el sitio https, por lo que se puede usar en relación URL-S en todas partes, sólo tiene que insertar una diferente base etiqueta cuando el usuario desea cambiar el formulario del sitio o http (s).

10
$url = str_replace('http://', 'https://', $url); 
0
$count = 1; 
$url = str_replace("http://", "https://", $url, $count); 

Nota: Pasando 1 directamente arrojará error fatal (Fatal error: Sólo las variables pueden ser pasado por referencia) así que hay que pasarlo último parámetro por referencia.

+1

Se arroja un error porque '$ count' solo contendrá la cantidad de reemplazos realizados. No es un parámetro destinado a establecer límites ni nada. –

1

Una solución que no sustituye las direcciones URL que contienen otras direcciones URL, por ejemplo http://foo.com/redirect-to/http://newfoo.com

$desiredScheme = "http"; // convert to this scheme; 
$parsedRedirectUri = parse_url($myCurrentUrl); 
if($parsedRedirectUri['scheme'] !== $desiredScheme) { 
    $myCurrentUrl= substr_replace($myCurrentUrl, $desiredScheme, 0, strlen($parsedRedirectUri['scheme'])); 
}