Foros del Web » Programando para Internet » PHP »

Función que funciona diferente según el entorno

Estas en el tema de Función que funciona diferente según el entorno en el foro de PHP en Foros del Web. Hola gente, les comento que estoy probando un script llamado Spirate, y que estoy siguiendo un método que han dado para crear urls amigables, pero ...
  #1 (permalink)  
Antiguo 20/04/2011, 08:20
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 18 años, 6 meses
Puntos: 34
Función que funciona diferente según el entorno

Hola gente, les comento que estoy probando un script llamado Spirate, y que estoy siguiendo un método que han dado para crear urls amigables, pero tengo un problema, dentro de la plantilla, el código no me reemplaza los acentos, pero al probarlo fuera de esta, el código si funciona.

¿Saben si depende de algo que un código php reaccione de formas distintas según el entorno?

Imagino que el problema está en como trae el script al asunto del post, pero no se bien en que parte del código trae estos datos.

Como ejemplo les dejo la cabecera del sitio ( http://spirate.alt245.com.ar/ ) y el link a las pruebas por separado que hice ( http://spirate.alt245.com.ar/testami.php ).

Código PHP:
$find = array('á''é''í''ó''ú''ñ');
$repl = array('a''e''i''o''u''n');
$url str_replace ($find$repl$url); 
Esa parte del código, realmente no está haciendo nada, sin embargo he hecho pruebas fuera del entorno de Spirate, en el mismo server, consultando la misma DB y el código si trabaja.

Pueden verlo acá, en "post-con-acento-chipa" esa última a si aparece http://spirate.alt245.com.ar/testami.php (Incluso puse el header del spirate por las dudas.

Espero me puedan orientar. Si necesitan mas datos me avisan.

PD: Ahí le agregué la salida sin filtrar y veo que los acentos no salen como tales. Aunque no creo que esté ahí el problema

****

El código de la prueba que hice yo, tras una simple consulta a la DB es este:

Código PHP:
<ul>
<?php 
$show
=mysql_query("SELECT * FROM smf_messages");
while (
$row mysql_fetch_array($show)){

$title=$row['subject'];

?>
<li>Sin filtrar>><?php echo $title;?></li>
<li>Filtrada por la función>><?php echo urls_amigables($title);?></li>
<?php ?>
</ul>
Dentro de la plantilla el codigo que genera la salida es este:

Código PHP:
    echo'<span title="'censorText($np['title']), '"><a href="/post/'$np['id'],'/',urls_amigables($np['title']), '/">',censorText($np['title']), '</a></span></div>'
Ojalá me puedan ayudar porque estoy perdidísimo.
__________________
elGastronomo
  #2 (permalink)  
Antiguo 20/04/2011, 08:23
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 12 años
Puntos: 334
Respuesta: Función que funciona diferente según el entorno

Para evitar eso.. podrias usar entidades HTML para tus textos seo..
yo porlomenos tengo mi class de esta forma.

Código PHP:
class Khaus_Uri_Seo
{
    static public function 
removeAccents($string)
    {
        
$html get_html_translation_table(HTML_ENTITIES);
        
$html array_slice($html32, -4);
        foreach (
$html as $char => $entitie) {
            
$bar[] = substr($entitie11);
        }
        
$string htmlentities($string);
        
$string str_replace($html$bar$string);
        return 
$string;
    }
    static public function 
safeName($string)
    {
        
$string self::removeAccents($string);
        
$string strtolower($string);
        
$string preg_replace('/(&[a-z0-9]+;|[^a-z0-9_])/''_'$string);
        
$string preg_replace('/[\s_]+/''_'$string);
        
$string trim($string'_');
        return 
$string;
    }


saludos.
  #3 (permalink)  
Antiguo 20/04/2011, 08:57
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 18 años, 6 meses
Puntos: 34
Respuesta: Función que funciona diferente según el entorno

Gracias, lo voy a probar, pero, perdón por esta pregunta de novato total, aunque se algo de PHP nunca he usado classes y no se como debo llamarla :P

__________________
elGastronomo
  #4 (permalink)  
Antiguo 20/04/2011, 09:01
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 12 años
Puntos: 334
Respuesta: Función que funciona diferente según el entorno

si solo quieres quitar los acentos

$string = Khaus_Uri_Seo::removeAccents($string);

y si quieres tener una tipica url amigable... ejemplo-url-amigable

$string = Khaus_Uri_Seo::safeName($string);


saludos.
  #5 (permalink)  
Antiguo 20/04/2011, 09:05
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 18 años, 6 meses
Puntos: 34
Respuesta: Función que funciona diferente según el entorno

Cita:
Iniciado por Hidek1 Ver Mensaje
si solo quieres quitar los acentos

$string = Khaus_Uri_Seo::removeAccents($string);

y si quieres tener una tipica url amigable... ejemplo-url-amigable

$string = Khaus_Uri_Seo::safeName($string);


saludos.
Genial mil gracias :)

Siempre se aprende algo nuevo, no sabia esto de las classes, :)

Gracias. Ahora lo pruebo dentro del entorno Spirate.
__________________
elGastronomo
  #6 (permalink)  
Antiguo 20/04/2011, 09:13
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 18 años, 6 meses
Puntos: 34
Respuesta: Función que funciona diferente según el entorno

Gracias man, funcionó genial :P No tengo idea por que la otra daba problemas, pero esta va de 10 :)

PD: Esta también se lleva los à è los ü ö y toda cosa rara no? Porque es algo que la que yo tenia no controlaba, esta creo que es más completa :)

__________________
elGastronomo
  #7 (permalink)  
Antiguo 20/04/2011, 09:14
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 12 años
Puntos: 334
Respuesta: Función que funciona diferente según el entorno

si se lleva casi todo signo extraño =) ...
te aconsejo que intentes entender la funcion para que sepas como trabaja..

saludos.
  #8 (permalink)  
Antiguo 20/04/2011, 09:48
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 18 años, 6 meses
Puntos: 34
Respuesta: Función que funciona diferente según el entorno

:S Perdón que sea molesto, pero mira lo que me pasó aca con esta función

Código:
http://spirate.alt245.com.ar/post/5/acentos_a_a_a_a_a_a/
Debería ser
Código:
http://spirate.alt245.com.ar/post/5/acentos_a_e_i_o_u_n/
Fuera del entorno Spirate si funciona

http://spirate.alt245.com.ar/testami2.php

:P Me rompe la cabeza estas cosas, no entiendo qué dentro del Spirate estará causando estos problemas :S

Lo que saca los acentos solo, sin usar el safename, me tira esto Sticky con Acentos A¡ A© A%C2%AD A³ Aº A±
__________________
elGastronomo

Última edición por American2010; 20/04/2011 a las 09:54
  #9 (permalink)  
Antiguo 20/04/2011, 09:56
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 12 años
Puntos: 334
Respuesta: Función que funciona diferente según el entorno

eso se debe a la codificacion de los caracteres entrantes
prueba esto

Código PHP:
$foo 'acentos_á_é_í_ó_ú_ñ';
$foo utf8_decode($foo);
echo 
Khaus_Uri_Seo::safeName($foo); 
tambien podrias editar la linea del codigo

Código PHP:
class Khaus_Uri_Seo
{
    static public function 
removeAccents($string)
    {
        
$html get_html_translation_table(HTML_ENTITIES);
        
$html array_slice($html32, -4);
        foreach (
$html as $char => $entitie) {
            
$bar[] = substr($entitie11);
        }
        
$string htmlentities($stringENT_QUOTES'UTF-8'); // agregado para problema con codificacion
        
$string str_replace($html$bar$string);
        return 
$string;
    }
    static public function 
safeName($string)
    {
        
$string self::removeAccents($string);
        
$string strtolower($string);
        
$string preg_replace('/(&[a-z0-9]+;|[^a-z0-9_])/''_'$string);
        
$string preg_replace('/[\s_]+/''_'$string);
        
$string trim($string'_');
        return 
$string;
    }


Última edición por Hidek1; 20/04/2011 a las 10:03
  #10 (permalink)  
Antiguo 20/04/2011, 10:18
 
Fecha de Ingreso: abril-2003
Mensajes: 1.129
Antigüedad: 18 años, 6 meses
Puntos: 34
Respuesta: Función que funciona diferente según el entorno

Millón de gracias por la ayuda y la paciencia.

¿Esto pasa por como están guardados los datos en la DB?

Igual ahora me estoy planteando crear una columna más en la DB para guardar la URL amigable ya en la DB en lugar de tener que armarla con el código a medida que se muestran.

Creo que es lo más flexible eso y más rápido.

Gracias de nuevo :)
__________________
elGastronomo
  #11 (permalink)  
Antiguo 20/04/2011, 10:20
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 12 años
Puntos: 334
Respuesta: Función que funciona diferente según el entorno

mas que planteartelo, deberias hacerlo..

si lo analizas...
es mejor usar la funcion para transformar 1 vez el link y guardarlo..
que guardarlo y transformarlo miles de veces que sea requerido...

vas por buen camino..

saludos.

Etiquetas: diferente, entorno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:03.