encode url codeigniter
Cuando queremos enviar algun link a un correo, o postearlo en alguna pagina web, hay problemas al utilizar $this->encrypt->encode($variable); cuando lo quieres enviar te salen carecteres como /,+,= que no son permitidos porque en config.php, permitted_uri_chars='valores permitidos', no estan esos caracteres, para eso hay dos formas de solucionarlo:
primero: poner los caracteres en permitted_uri_chars='nuevos valores permitidos'.
segundo: agregar una funcion que cambie los caracteres que no estan permitidos por otros que si son permitidos; aqui esta la funcion que forme:
la primera funcion es para ponerlo en un encode:
public function encode_to_url($subject)
{
$pos_slash= strpos($subject, '/');
if($pos_slash!==false)
{
$codigo_email_s= str_replace('/', ':', $subject);
}
else {$codigo_email_s=$subject;}
$pos_igual= strpos($codigo_email_s, '=');
if($pos_igual!==false)
{
$codigo_email_m= str_replace('=', '_', $codigo_email_s);
}
else {$codigo_email_m=$codigo_email_s;}
$pos_mas= strpos($codigo_email_m, '+');
if($pos_mas!==false)
{
$codigo_email= str_replace('+', '~', $codigo_email_m);
}
else {$codigo_email=$codigo_email_m;}
return $codigo_email;
}
el segundo es para pasarlo de url a un encode y poderlo asi $this->encrypt->decode($subject);
public function url_to_encode($codigo)
{
$pos_slash= strpos($codigo, ':');
if($pos_slash!==false)
{
$codigo_email_s= str_replace(':', '/', $codigo);
}
else {$codigo_email_s=$codigo;}
$pos_igual= strpos($codigo_email_s, '_');
if($pos_igual!==false)
{
$codigo_email_m= str_replace('_', '=', $codigo_email_s);
}
else {$codigo_email_m=$codigo_email_s;}
$pos_mas= strpos($codigo_email_m, '~');
if($pos_mas!==false)
{
$subject= str_replace('~', '+', $codigo_email_m);
}
else {$subject=$codigo_email_m;}
return $subject;
}
espero haberlos ayudado, yo me pase mucho tiempo para solucionar esto, si les ayudo pueden enviar comentarios, o si tienen alguna mejor manera, o error que han encontrado no duden en comentar.
primero: poner los caracteres en permitted_uri_chars='nuevos valores permitidos'.
segundo: agregar una funcion que cambie los caracteres que no estan permitidos por otros que si son permitidos; aqui esta la funcion que forme:
la primera funcion es para ponerlo en un encode:
public function encode_to_url($subject)
{
$pos_slash= strpos($subject, '/');
if($pos_slash!==false)
{
$codigo_email_s= str_replace('/', ':', $subject);
}
else {$codigo_email_s=$subject;}
$pos_igual= strpos($codigo_email_s, '=');
if($pos_igual!==false)
{
$codigo_email_m= str_replace('=', '_', $codigo_email_s);
}
else {$codigo_email_m=$codigo_email_s;}
$pos_mas= strpos($codigo_email_m, '+');
if($pos_mas!==false)
{
$codigo_email= str_replace('+', '~', $codigo_email_m);
}
else {$codigo_email=$codigo_email_m;}
return $codigo_email;
}
el segundo es para pasarlo de url a un encode y poderlo asi $this->encrypt->decode($subject);
public function url_to_encode($codigo)
{
$pos_slash= strpos($codigo, ':');
if($pos_slash!==false)
{
$codigo_email_s= str_replace(':', '/', $codigo);
}
else {$codigo_email_s=$codigo;}
$pos_igual= strpos($codigo_email_s, '_');
if($pos_igual!==false)
{
$codigo_email_m= str_replace('_', '=', $codigo_email_s);
}
else {$codigo_email_m=$codigo_email_s;}
$pos_mas= strpos($codigo_email_m, '~');
if($pos_mas!==false)
{
$subject= str_replace('~', '+', $codigo_email_m);
}
else {$subject=$codigo_email_m;}
return $subject;
}
espero haberlos ayudado, yo me pase mucho tiempo para solucionar esto, si les ayudo pueden enviar comentarios, o si tienen alguna mejor manera, o error que han encontrado no duden en comentar.
GRANDE JUAN!!
ReplyDelete