Foros del Web » Programando para Internet » PHP »

Problema con API de Twitter y caracteres especiales

Estas en el tema de Problema con API de Twitter y caracteres especiales en el foro de PHP en Foros del Web. Buenas, les cuento el problema que tengo, estoy usando el API de Twitter para enviar mensajes a este servicio desde mi web (Título del post ...
  #1 (permalink)  
Antiguo 12/11/2009, 14:04
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Problema con API de Twitter y caracteres especiales

Buenas, les cuento el problema que tengo, estoy usando el API de Twitter para enviar mensajes a este servicio desde mi web (Título del post + URL), el script que uso es este:

Código PHP:
<?php
    
function postToTwitter($username,$password,$message){
    
        
$host "http://twitter.com/statuses/update.xml?status=".urlencode(stripslashes(urldecode($message)));
    
        
$ch curl_init();
        
curl_setopt($chCURLOPT_URL$host);
        
curl_setopt($chCURLOPT_VERBOSE1);
        
curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
curl_setopt($chCURLOPT_USERPWD"$username:$password");
        
curl_setopt($chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1);
        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_HTTPHEADER, array('Expect:'));
    
        
$result curl_exec($ch);
        
$resultArray curl_getinfo($ch);
        
curl_close($ch);
        if(
$resultArray['http_code'] == "200"){
            echo 
"<br />OK! postedo en http://twitter.com/".$username."/<br />";
        }else {
            echo 
"<br />Error! ha ocurrido un problema<br />";
        }
    }
    
postToTwitter("USER","PASS","Más pruebas");
?>
El problema que tengo es que cuando quiero probar enviando un texto que contiene caracteres especiales como tildes, "ñ", etc. en Twitter el mensaje sale cortado, por ejemplo, en el script de arriba al ejecutarlo y ver en Twitter el resultado, en lugar de aparecer Más pruebas aparece Mápruebas, como notarán, se come los dos caracteres siguientes a la vocal tildada, le he estado dando miles de vueltas para tratar de corregirlo pero no encuentro la solución, alguno de ustedes me puede echar una mano?

Gracias y Saludos :)
  #2 (permalink)  
Antiguo 12/11/2009, 14:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Problema con API de Twitter y caracteres especiales

Para salir de dudas primero haz un echo a la variable dentro de la función $message. Me refiero a esto
Código PHP:
Ver original
  1. function postToTwitter($username,$password,$message){
  2.   echo urlencode(stripslashes(urldecode($message)));
  3.   //.........
  4. }
y dinos que te trae.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 12/11/2009, 17:02
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Problema con API de Twitter y caracteres especiales

Cita:
Iniciado por abimaelrc Ver Mensaje
Para salir de dudas primero haz un echo a la variable dentro de la función $message. Me refiero a esto
Código PHP:
Ver original
  1. function postToTwitter($username,$password,$message){
  2.   echo urlencode(stripslashes(urldecode($message)));
  3.   //.........
  4. }
y dinos que te trae.
Lo que me devuelve es esto: M%E1s+pruebas
  #4 (permalink)  
Antiguo 13/11/2009, 12:20
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Respuesta: Problema con API de Twitter y caracteres especiales

Probá así:
Código PHP:
<?php
    
function postToTwitter($username,$password,$message){
    
        
$host "http://twitter.com/statuses/update.xml?status=".rawurlencode(htmlentities($message));
    
        
$ch curl_init();
        
curl_setopt($chCURLOPT_URL$host);
        
curl_setopt($chCURLOPT_VERBOSE1);
        
curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
curl_setopt($chCURLOPT_USERPWD"$username:$password");
        
curl_setopt($chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1);
        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_HTTPHEADER, array('Expect:'));
    
        
$result curl_exec($ch);
        
$resultArray curl_getinfo($ch);
        
curl_close($ch);
        if(
$resultArray['http_code'] == "200"){
            echo 
"<br />OK! postedo en http://twitter.com/".$username."/<br />";
        }else {
            echo 
"<br />Error! ha ocurrido un problema<br />";
        }
    }
    
postToTwitter("user","pass","Más pruebas");
?>
  #5 (permalink)  
Antiguo 13/11/2009, 12:46
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Problema con API de Twitter y caracteres especiales

@Panino5001, ¿pero eso convertirá primero a htmlentities y luego los simbolos de & los convertirá en hexadecimales? ¿Y si trata con solo usar rawurlencode?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 13/11/2009, 13:05
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Respuesta: Problema con API de Twitter y caracteres especiales

Sí, pero lo probé y funciona, ja, ja!
Edito: lo probé sólo con rawurlencode y no, sigue siendo un problema. Y sólo con htmlentities también. Sólo combinados funcionó sin problemas.

Última edición por Panino5001; 13/11/2009 a las 13:14
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 00:11.