Ir al contenido principal

Tips y enlaces de la semana

json_encode y problemas con acentos.

Según la documentación de la función json_encode, esta solo funciona con caracteres codificados en utf-8, así que si trabajamos con caracteres con otra codificación podemos convertirlos con la función utf8_encode. Asi:

json_encode(utf8_encode($dato));


Si lo que queremos es pasar un arreglo a json, debemos pasar cada item del arreglo a utf8 y para esto usaremos la función array_map, quedando de la siguiente manera:

json_encode(array_map("utf8_encode",$arreglo));

Esta función está disponible desde la versión 5.2 de PHP, asi que si usas una versión anterior intentalo con la versión de json_encode y json_decode para PHP4
Este archivo se usa de la siguiente forma:

// create a new instance of Services_JSON
require_once('JSON.php');
$json = new Services_JSON();

// convert a complex value to JSON notation
$value = array(1, 2, ‘foo’);
$output = $json->encode($value);
print($output);

// accept incoming POST data
$input = $GLOBALS['HTTP_RAW_POST_DATA'];
$value = $json->decode($input);

Sin embargo para no modificar las llamadas a las funciones que ya tengamos hechas, podemos agregar al final del archivo lo siguiente:

if(!function_exists('json_encode')){	
	function json_encode($value){
		$json = new Services_JSON();
		return $json->encode($value);
	}
}

if(!function_exists('json_decode')){	
	function json_decode($value){
		$json = new Services_JSON();
		return $json->decode($value);
	}
}

Luego solo bastaría escribir require_once('JSON.php');  al inicio de los archivos en que usemos la función y la tendríamos disponible en todas las versiones de PHP

Enlaces:

Facebook Connect desde el localhost

Comentarios

Entradas populares de este blog

Enumerar filas en una consulta con MySQL

Supongamos que tenemos tablas con la estructura siguiente: documentos (iddocumento, nombre_documento, url_original, idtipo_documento, idproyecto) proyectos (idproyecto, nombre_proyecto, longitud, unidad_medida) tipo_documentos (idtipo_documento, descripcion_tipo_documento) Tenemos necesidad de hacer una consulta como la siguiente: "Enumerar todos los documentos en la base de datos agrupados por proyecto" Parece fácil, excepto por el término "enumerar", aquí tienes un truquito para que logres enumerar tus consultas: SELECT (@rownum:=@rownum+1) AS rownum, nombre_documento, descripcion_tipo_documento, nombre_proyecto FROM (SELECT @rownum:=0) r, documentos AS d INNER JOIN proyectos AS p ON d.idproyecto = p.idproyecto INNER JOIN tipo_documentos AS td ON d.idtipo_documento = td.idtipo_documento Pero que tal si te piden que enumeres los proyectos con sus correspondientes documentos?. Teniendo lo anterior es un poco mas sencillo SELECT IF(@fila=proyectos.idproyecto, ...

Auth::attempt siempre retorna falso

Estaba obteniendo un error que parece común entre los usuarios novatos de Laravel. Al usar Auth::attempt este siempre me estaba retornando falso. Este era el código que usaba: class UserTableSeeder extends Seeder{ public function run(){ User::create(array( 'username' => 'admin', 'email' => 'test@test.net', 'name'=> 'Administrator', 'password' => Hash::make('123456') )); } } use Illuminate\Auth\UserTrait; use Illuminate\Auth\UserInterface; use Illuminate\Auth\Reminders\RemindableTrait; use Illuminate\Auth\Reminders\RemindableInterface; class User extends Eloquent implements UserInterface, RemindableInterface { protected $fillable = array('email', 'username', 'password'); use UserTrait, RemindableTrait; /** * The database table used by the model. * * @var string */ protected $table = '...

Personalizando Chrome

Cuando hablo de personalizar no me refiero a cambios en el tema, ni modificar algún comportamiento via la configuración, no, me refiero a obtener el código, modificarlo y compilarlo para crear mi propia "distribución". Así que antes de nada realiza esto: Descargar el codigo: http://dev.chromium.org/developers/how-tos/get-the-code Como compilar: https://code.google.com/p/chromium/wiki/NinjaBuild En caso, como a mi, que necesite una version anterior: https://www.chromium.org/developers/how-tos/get-the-code/working-with-release-branches Me encontré con varios errores cuando trate de descargar la versión 37, aquí está el hilo con las soluciones: https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/pmki-Uju6Zs La version 37 no estaba preparada para los cambios que vinieron con Yosemite, un error que encontré:  https://codereview.chromium.org/555163002 https://chromium.googlesource.com/chromium/src.git/+/59c4ad104b6f03af9c9acffc0fd9a42707083390/ba...