Agregar http: // prefijo a URL cuando falta

Hola tengo un código muy simple

 
Website

El problema es que si el usuario no ingresa http: // el enlace apuntará a mi sitio web y no al sitio web externo como debería.

¿Cómo reviso PHP si el usuario no ha ingresado http: // y lo agrego automáticamente cuando no está allí?

Una solución simple que puede no funcionar en todos los casos (es decir, ‘https: //’):

 if (strpos($aProfileInfo['Website'],'http://') === false){ $aProfileInfo['Website'] = 'http://'.$aProfileInfo['Website']; } 

Creo que será mejor que utilices la función parse_url() que devuelve una matriz asociativa con sus componentes

algo como esto funcionará para usted:

  if ( $ret = parse_url($url) ) { if ( !isset($ret["scheme"]) ) { $url = "http://{$url}"; } } 

Hay dos formas de abordar este problema: análisis de URL y expresiones regulares.

Algunos dirán que el análisis de URL es correcto , pero las expresiones regulares funcionan igual de bien en este caso. Me gusta ser capaz de tener líneas simples para este tipo de cosas, especialmente porque esto sería una ocurrencia común en los archivos de plantilla, donde es posible que necesite una línea dentro de una statement de eco para mantener la legibilidad.

Expresiones regulares

Podemos hacer esto en una llamada a función única con preg_replace .

 preg_replace('/^(?!https?:\/\/)/', 'http://', $aProfileInfo['Website']) 

Esto utiliza un negative lookahead al comienzo de la cadena que busca http:// o https:// . Si se encuentran cualquiera, el reemplazo no ocurre. Si no se encuentran, reemplaza el comienzo de la cadena (0 caracteres) con http:// esencialmente anteponiendo esto a la cadena sin modificarla.

En contexto:

  
Website

Análisis de URL

 (parse_url($aProfileInfo['Website'], PHP_URL_SCHEME) ? '' : 'http://') . $aProfileInfo['Website'] 

Lo que hace es averiguar si hay un esquema presente en el enlace a través de parse_url($aProfileInfo['Website'], PHP_URL_SCHEME) . Luego, usando un operador ternario, se generará '' si se encontró uno o 'http://' si no se encontró uno. Luego agrega el enlace a eso.

En contexto:

  
Website

Yo personalmente uso esto, que está parcialmente tomado de php docs

 $scheme = parse_url($link, PHP_URL_SCHEME); if (empty($scheme)) { $link = 'http://' . ltrim($link, '/'); } 

Puedes usar strpos :

 // Trim trailing whitespace $aProfileInfo['Website'] = trim($aProfileInfo['Website']); // Test if the string begins with "http://" if (strpos($aProfileInfo['Website'], 'http://') !== 0) { $aProfileInfo['Website'] = 'http://' . $aProfileInfo['Website']; } 

Puede usar esta función como general si nada de la matriz se encuentra en la cadena y le agrega algo.

 function httpify($link, $append = 'http://', $allowed = array('http://', 'https://')){ $found = false; foreach($allowed as $protocol) if(strpos($link, $protocol) !== 0) $found = true; if($found) return $link; return $append.$link; } 

También puede tener en cuenta que “http (s)” debe estar al comienzo de la url:

 if (preg_match('/^https?:\/\//', $aProfileInfo['Website']) === 0) { $aProfileInfo['Website'] = 'http://'.$aProfileInfo['Website']; } 

¿Algo como esto?

 if (!strpos($aProfileInfo['Website'], 'http://')) { $aProfileInfo['Website'] = 'http://' . $aProfileInfo['Website']; } 

Aquí hay otro ejemplo con la resta de cadenas :

 $changeLink = $myRow->site_url; if(substr($changeLink, 0, 7) != 'http://') { $changeLink = 'http://' . $changeLink; } 

//

 echo ""; 

Creo que la respuesta de David es la forma correcta de hacerlo, pero se puede simplificar así:

 parse_url($aProfileInfo['Website'], PHP_URL_SCHEME)==''?'http://'.$aProfileInfo['Website']:$aProfileInfo['Website']