WIKI Soluzione semplice per ....

Ciao ragazzi, volevo sapere se conoscevate un sistema per parserizzare un testo scritto in stile wiki. Non so una classe che mi permette di scrivere semplicemente:

Faccio un esempio:

Ecco la pagina che parla del php su Wivipedia

{{Infobox Software |
 nome = PHP |
 sviluppatore = The PHP Group |
 versione_ultimo_rilascio = 5.1.4 / [[4 maggio]] [[2006]]<br /> 4.4.2 |
 data_ultimo_rilascio = [[13 gennaio]] [[2006]] |
 sistema_operativo = [[Multipiattaforma]] |
 genere = [[Linguaggio di scripting]] |
 licenza = [http://www.php.net/license/3_01.txt PHP License 3.01] |
 sito_web = [http://www.php.net/ http://www.php.net]
}}

{{Wikibooks|1=Linguaggio PHP|PAGENAME=PHP}}


'''PHP''' è un [[Linguaggio di programmazione#Linguaggi di scripting|linguaggio di scripting]] interpretato con licenza [[open source]], utilizzato principalmente per la realizzazione di applicazioni web [[lato server]] e [[pagine web dinamiche]]. Da qui il suo nome: un [[acronimo ricorsivo]] che sta per '''''P'''HP: '''H'''ypertext '''P'''reprocessor'' (PHP: [[preprocessore]] di [[ipertesto|ipertesti]]).

Il software [[MediaWiki]], che gestisce i siti del progetto [[Wikipedia]], è scritto in PHP.


== Cenni storici ==

Nato nel [[1994]] ad opera del danese [[Rasmus Lerdorf]], PHP era in origine una raccolta di ''script'' [[CGI]] che permettevano una facile gestione delle pagine personali. Per questo motivo il significato originario dell'[[acronimo]] pare fosse '''''P'''ersonal '''H'''ome '''P'''age'' (sull'origine dell'acronimo ci sono tuttora alcuni dubbi, alimentati dallo stesso Lerdorf che ha contribuito volontariamente a generare attorno al nome questo alone di mistero).
Il pacchetto originario venne in seguito esteso e riscritto dallo stesso Lerdorf in [[C_(linguaggio)|C]], aggiungendo funzionalità quali il supporto al database [[MSQL|mSQL]] e prese a chiamarsi '''PHP/FI''', dove ''FI'' sta per '''''F'''orm '''I'''nterpreter'' (interprete di ''form''), prevedendo la possibilità di integrare il codice PHP nel codice [[HTML]] in modo da semplificare la realizzazione di pagine dinamiche. In quel periodo, 50.000 domini internet annunciavano di aver installato PHP.

A questo punto il linguaggio cominciò a godere di una certa popolarità tra i progetti ''open source'' del ''[[web]]'', e venne così notato da due giovani programmatori: [[Zeev Suraski]] e [[Andi Gutmans]]. I due collaborarono nel [[1998]] con Lerdorf allo sviluppo della terza versione di PHP (il cui acronimo assunse il significato attuale) riscrivendone il motore che fu battezzato [[Zend]] da una contrazione dei loro nomi. Le caratteristiche chiave della versione PHP 3.0 frutto del loro lavoro, erano la straordinaria estensibilità, la connettività ai [[database]] e il supporto iniziale per il [[Programmazione_orientata_agli_oggetti|paradigma a oggetti]]. Verso la fine del 1998 PHP 3.0 era installato su circa il 10% dei server web presenti su Internet.

PHP diventò a questo punto talmente maturo da competere con [[ASP]], linguaggio ''lato server'' analogo a PHP sviluppato da [[Microsoft]], e cominciò ad essere usato su larga scala. La versione 4 di PHP venne rilasciata nel [[2000]] e prevedeva notevoli migliorie. 
Attualmente siamo alla quinta versione, sviluppata da un [http://www.php.net/credits.php team] di programmatori, che comprende ancora Lerdorf, oltre a Suraski e Gutmans.

La popolarità del linguaggio PHP è in costante crescita grazie alla sua semplicità: nel [[Giugno]] [[2001]], ha superato il milione di [http://www.php.net/usage.php siti che lo utilizzano].
Nell'ottobre [[2002]], [http://www.securityspace.com/s_survey/data/man.200210/apachemods.html più del 45%] dei [[server]] [[Apache HTTP Server|Apache]] usavano PHP.

Nel gennaio [[2005]] è stato insignito del titolo di "Programming Language of 2004" dal [[TIOBE Programming Community Index]], classifica che valuta la popolarità dei linguaggi di programmazione sulla base di informazioni raccolte dai [[Motore di ricerca|motori di ricerca]].

Nel [[2005]] la configurazione LAMP ([[Linux]], [[Apache HTTP Server|Apache]], [[MySQL]], PHP) supera il 50% del totale dei server sulla rete mondiale.

== Caratteristiche ==

PHP riprende per molti versi la [[sintassi]] [[C_(linguaggio)|C]], come peraltro fanno molti linguaggi moderni; riprende però anche alcune caratteristiche sintattiche del [[Perl]], per facilitare l'apprendimento a chi già conosce questo linguaggio.

È un linguaggio a [[tipizzazione debole]] e a partire dalla versione 5, si può dire che supporta seriamente la [[Programmazione orientata agli oggetti|programmazione ad oggetti]]. Certi costrutti derivati dal [[C_(linguaggio)|C]], come gli operatori fra [[bit]] e la gestione di [[Stringa (informatica)|stringhe]] come [[array]], permettono in alcuni casi di agire a basso livello; tuttavia è fondamentalmente un linguaggio di alto livello, caratteristica questa rafforzata dalla cura quasi pignola che viene dedicata allo sviluppo delle sue moltissime [[Application programming interface|API]], oltre 3079 funzioni del nucleo base. PHP è in grado di interfacciarsi a moltissimi [[DBMS|database]] tra cui [[MySQL]], [[PostgreSQL]], [[Oracle]], [[Firebird SQL|Firebird]], [[DB2|IBM DB2]], [[Microsoft SQL Server]] solo per citarne alcuni, e supporta numerose tecnologie, come [[XML]], [[SOAP]], [[IMAP]], [[FTP]], [[CORBA]]. Si integra anche con altri linguaggi/piattaforme quali [[Linguaggio di programmazione Java|Java]] e [[.NET]] e si può dire che esista un [[wrapper]] per ogni libreria esistente, come CURL, [[GD Graphics Library|GD]], [[Gettext]], GMP, Ming, [[OpenSSL]] ed altro.

Fornisce un'[[API]] specifica per interagire con [[Apache HTTP Server|Apache]], nonostante funzioni naturalmente con numerosi [[Web server|server web]]. È anche ottimamente integrato con il database [[MySQL]], per il quale possiede più di una [[API]]. Per questo motivo esiste un'enorme quantità di [[script]] e [[Libreria software|librerie]] in PHP, disponibili liberamente su [[Internet]]. La versione 5, comunque, integra al suo interno un piccolo database embedded, [[SQLite]].

Dispone di un archivio chiamato [[PEAR]] che mette a disposizione un framework di [[Libreria software|librerie]] riusabili per lo sviluppo di applicazioni PHP e di [http://pecl.php.net PECL] che raccoglie tutte le estensioni conosciute scritte in C.

Inoltre PHP, sebbene sia concepito per la [[programmazione]] web, può essere utilizzato per scrivere [[script]] a [[Interfaccia a linea di comando|linea di comando]] e grazie all'estensione [http://gtk.php.net/ php-gtk], è possibile sviluppare applicazioni con [[interfaccia grafica]] lato client.

== Esempi di codice ==
=== [[Hello world|Hello, world!]] ===
Il seguente esempio stampa il testo "[[Hello world]]" (vedi ''[http://php.net/manual/it/language.basic-syntax.php Sintassi fondamentale]'' del manuale di PHP).

 <?php
 
 echo "Hello world";
 
 ?>

Una variante, utilizzando una [[Variabile (informatica) | variabile]] per creare l'output, potrebbe essere:

 <?php
 
 $var = 'world';
 echo "Hello $var";
 
 ?>

=== Una semplice funzione con controllo sugli argomenti ===

 <?php
 
 function get_hello_world($value1, $value2)
 {
     $result = "";
 
     if ($value1 != "") {
         $result .= $value1;
     }
 
     if (($value1 != "") && ($value2 != "")) {
         $result .= " ";
     }
 
     if ($value2 != "") {
         $result .= $value2;
     }
 
     return $result;
 }
 
 echo get_hello_world("Hello", "world");
    
 ?>

=== 99 Bottles of Beer ===
Il seguente esempio stampa il testo della canzone ''[[99 Bottles of Beer]]''.

<pre><nowiki>
 <?php
 
 /*
  * Questo è un commento. Altri modi per commentare sono i simboli // e #
  * Questo tipo di commenti non ha bisogno degli asterischi (*) all'inizio
  * di ogni riga, ma lo si fa per convenzione. I simboli // e #
  * commentano solo il testo che si trova dopo di essi e fino alla fine della riga;
  * non c'è bisogno di finire il commento con qualche carattere speciale.
  */
 
 /*
  * Prima definiamo una funzione chiamata "plural".
  * Restituisce una "s" se l'argomento passato non è 1.
  */
 function plural($number)
 {
     return ($number != 1 ? "s" : "");
     // L'operatore ternario (!= ? :) è una struttura condizionale simile a if-else: (condizione ? true : false)
 }
 
 // Definiamo una variabile chiamata $l che contiene un a capo HTML,
 // un carattere di ritorno e uno di nuova riga:
 $l = "
 
 \r\n";
 
 for ($i = 99; $i > 0; $i--) {
    print "$i bottle" . plural($i) . " of beer on the wall,$l";
    // Non abbiamo bisogno di ripetere il comando print per ogni riga:
    print "$i bottle" . plural($i) . " of beer.$l <br>
         Take one down, pass it around,$l" .
         ($i - 1 != 0 ? $i - 1 : "no more") .
         " bottle" . plural($i - 1) . " of beer on the wall.$l$l<p>";
    /*
      * PHP permette di creare stringhe su più righe, finché
      * trova un punto e virgola (;) che termina l'istruzione.
      * Un punto (.) concatena insieme più stringhe.
      * Le variabili, che iniziano con il carattere "$", sono interpetate
      * anche dentro i doppi apici ("), ma non dentro gli apici singoli (').
      * Le funzioni, come plural(), non sono interpretate fra gli apici.
      */
 }

 
 print "Go to the store, $l buy some more, $l 99 bottles of beer on the wall!";
 
 ?>
</nowiki></pre>

== php.ini ==

Il file di configurazione di PHP, chiamato php3.ini in PHP 3, e poi semplicemente php.ini nelle versioni successive, è letto all'avvio dell'interprete del linguaggio e fornisce le impostazioni dei vari moduli con cui l'interprete è stato compilato. Nella versione server modulare di PHP, questo avviene solo una volta, all'avvio del [[Web Server|server web]]. Per le versioni [[CGI]] e [[CLI]], invece, è invocato ad ogni richiesta.

Per visualizzare tutte le opzioni di configurazione è possibile utilizzare la funzione phpinfo().

== Ambienti di sviluppo ==
*{{en}} [http://bluefish.openoffice.nl/ Bluefish]
*{{en}} [http://www.dreamweaver.com/ Dreamweaver MX]
*{{en}} [http://www.maguma.com/ Maguma Workbench]
*{{en}} [http://www.nusphere.com/index.htm NuSphere PHPEd]
*{{en}} [http://www.mpsoftware.dk/ PHP Designer 2005] 
*{{en}} [http://www.phpeclipse.de PHPEclipse]
*{{en}} [http://www.ankord.com/phpxedit.html PHP Expert Editor]
*{{en}} [http://devphp.sourceforge.net/ Dev-PHP]
*{{en}} [http://www.waterproof.fr/ PHPEdit]
*{{en}} [http://quanta.kdewebdev.org/ Quanta Plus] 
*{{en}} [http://www.phpside.org/index.php Side]
*{{en}} [http://www.xored.com/trustudio Xored TruStudio]
*{{en}} [http://www.zend.com/store/products/zend-studio.php Zend Studio]
*{{en}} [http://www.c-point.com/php_editor.php Antechinus® PHP Editor]
*{{en}} [http://www.gphpedit.org gPHPEdit]
*{{en}} [http://www.jedit.org jEdit]

==Wikibooks==
*[[b:Linguaggio PHP|Linguaggio PHP]]

== Libri ==
*Zak Greant, Graeme Merrall, Torben Wilson, Brett Michlitsch (2002): ''PHP Functions Essential Reference'', Sams, ISBN 073570970X
*Luke Welling, Laura Thomson (2004): ''PHP and MySQL Web Development'', 3rd ed., SAMS, ISBN 0672326728
*Matt Zandstra (2004): ''PHP 5 Objects, Patterns, and Practice'', Apress, ISBN 1590593804
*Eric Rosebrock, Eric Filson (2004): ''Setting Up LAMP: Getting Linux, Apache, MySQL, and PHP Working Together'', SYBEX, ISBN 0-7821-4337-7
*Cristian Darie, Mihai Bucica (2004): ''Beginning PHP 5 and MySQL E-Commerce: From Novice to Professional'', Apress, ISBN 1590593928
*David Powers (2005): ''Foundation PHP 5 for Flash'', Friends of ED, ISBN 1590594665
*Elizabeth Naramore, (2005): ''Beginning PHP5, Apache, and MySQL Web Development'', Wrox, ISBN 0764579665
*Thomas Myer (2005): ''No Nonsense XML Web Development With PHP'', [[SitePoint]], ISBN 097524020X
*Marc Wandschneider (2005): ''Core Web Application Development with PHP and MySQL'', Prentice-Hall, ISBN 0131867164
*Steven Holzner (2005): ''Spring Into PHP 5 '', Addison-Wesley, ISBN 0131498622
* (2005): ''Building Online Communities with phpBB 2 '', Packt Publishing, ISBN 1904811132 
* (2005): ''Web Standards Programmer's Reference : HTML, CSS, JavaScript, Perl, Python, and PHP'', Wrox, ISBN 0764588206 
*Chris Newman (2005): ''Sams Teach Yourself PHP in 10 Minutes'', ISBN 0672327627
*Paul Hudson (2005): ''PHP in a Nutshell'', O'Reilly, ISBN 0596100671
*Andi Gutmans, Stig S. Bakken, Derick Rethans (2005): ''PHP 5: Guida completa'', Apogeo, ISBN 8850323042

== Collegamenti esterni ==
*[http://www.php.net/manual/it/ Manuale ufficiale]
*[http://www.GrUSP.it/ Sito del GrUSP: GRuppo Utenti e Sviluppatori PHP italiani]
*[http://wiki.GrUSP.it/ Wiki del GrUSP - approfondimenti sugli argomenti relativi a PHP]
*[http://freephp.html.it/ Risorse sul linguaggio PHP per webmaster - Manuale PHP]
*[http://www.massimo-caselli.com/ Blog e articoli su PHP e il mondo Opensource - Articoli PHP]
*{{en}} [http://www.php.net/ Sito ufficiale]
*{{en}} [http://www.zend.com/ Sito di Zend] 
*{{en}} [http://www.phpclasses.org Numerose e utili classi di sviluppo in PHP]
*{{en}} [http://pear.php.net/ Sito della repository PEAR]
*{{en}} [http://www.webmasterpoint.org/php/home.asp Manuale, Tutorial e Script PHP]
*{{en}} [http://www.hotscripts.com/PHP/index.html Manuali e numerosi Script PHP suddivisi per categorie]

{{Principali linguaggi di programmazione}}

[[Categoria:Linguaggi di programmazione]]
[[Categoria:Acronimi]]
[[Categoria:Internet]]

[[als:PHP]]
[[an:PHP]]
[[ar:??.???.??]]
[[az:PHP]]
[[bg:PHP]]
[[bs:PHP]]
[[ca:PHP]]
[[cs:PHP]]
[[da:PHP]]
[[de:PHP]]
[[en:PHP]]
[[eo:PHP]]
[[es:PHP]]
[[et:PHP]]
[[eu:PHP]]
[[fa:???? ???????????? ????????]]
[[fi:PHP]]
[[fr:PHP hypertext preprocessor]]
[[gl:PHP]]
[[he:PHP]]
[[hr:PHP]]
[[hu:PHP programozási nyelv]]
[[id:PHP]]
[[is:PHP]]
[[ja:PHP Hypertext Preprocessor]]
[[kk:PHP]]
[[ko:PHP]]
[[ku:PHP]]
[[lt:PHP]]
[[lv:PHP]]
[[ms:PHP]]
[[nl:PHP]]
[[no:PHP]]
[[pl:PHP]]
[[pt:PHP]]
[[ro:PHP]]
[[ru:PHP]]
[[sh:PHP]]
[[simple:PHP: Hypertext Processor]]
[[sk:PHP]]
[[sl:PHP]]
[[sq:PHP]]
[[sr:?????????? ????? ???]]
[[sv:PHP]]
[[th:???????????]]
[[tr:PHP]]
[[uk:PHP (???? ?????????????)]]
[[vi:PHP]]
[[zh:PHP]]
$text = "testo con formattazione wiki";
$mywikiparser = new wikiparser();
$mywikiparser->parse($text);

Grazie

Ulisse

 :bye:

inviato 10 anni fa
ulisse
X 0 X

Non so se esista qualcosa del genere. Perché non provi a spulciare il codice di un wiki e a vedere se al suo interno c'è qualcosa che può servirti?

Oppure preparati a scrivere una valanga di espressioni regolari.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Parlavo di una soluzione WIKI non BBCODE. Non credo che sia la stessa cosa...oppure sbaglio?

risposto 10 anni fa
ulisse
X 0 X

beh, alla fine sempre di parsing si tratta, quindi sempre da lì si parte...

risposto 10 anni fa
Xscratch
X 0 X

Beh ma si tratta di una cosa molto più sofisticata di un semplice "replace". Grazie comunque.  :bye:

risposto 10 anni fa
ulisse
X 0 X

effettivamente la sintassi di quel tipo di file è molto simile al bbcode (che è molto più sofisticato di un semplice replace!)

ulisse, se non trovi qualcosa di già pronto, magari potresti porre un problema alla volta così magari proviamo a risolverlo!

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

in ogni caso, io avevo cercato solo su phpclasses.org

estendendo la ricerca (Google, I love you!)...

Text Wiki - PEAR package for parsing and rendering wiki text

Wiki Parser The Typ0

più di così...

risposto 10 anni fa
Xscratch
X 0 X

sono alle prese con sto wiki che mi fa impazzire. Quello che mi proponi l'avevo già trovato prima di fare il post qua ho cercato  su molti sistemi come google o phpclasses e li ho usati ma senza alcun risultato. Molto files e non una semplice classe. Ho notato che tutti i sistem BBCODE utilizzano i preg_replace se non ricordo male per questo dico che non credo sia semplicemente un replace.

Sto tentando di utilizzare la classe PEAR consigliata ma dopo averla installata non so come richiamare le funzioni di parsing:

Text Wiki - PEAR package for parsing and rendering wiki text

 :bye:

risposto 10 anni fa
ulisse
X 0 X

hai provato questo esempio:

http://wiki.ciaweb.net/yawiki/index.php?area=Text_Wiki&page=SamplePage

<?php
// Set up the wiki options
$options = array();
$options['view_url'] = "index.php?page=";

// load the text for the requested page
$text = implode('', file($page . '.wiki.txt'));

// create a Wiki objext with the loaded options
$wiki = new Text_Wiki($options);

// transform the wiki text.
echo $wiki->transform($text);
?>

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Grazie Gianni, avevo già provato lo script ma non funziona correttamente.  :buck:

Ho provato a creare un progettino con PEAR e la classe WIKI ma l'istanza con l'opzione impostata non funziona come dovrebbe. Mi genera il seguente errore:

Notice: Only variable references should be returned by reference in c:\programmi\apache group\apache\htdocs\eurocv2\classes\PEAR\Text\Wiki.php on line 1411

Notice: Undefined index: test.php?page= in c:\programmi\apache group\apache\htdocs\eurocv2\classes\PEAR\Text\Wiki.php on line 929

Ovviamente escludendo l'opzione funziona tutto tranne la gestione dei link. Ecco il mio codice:

<?php

/**
 *
 *
 * @version $Id$
 * @copyright 2006
 */

require "Text/Wiki.php";

// Set up the wiki options
$options = array();
$options['view_url'] = "test.php?page=";

$wikitext = "
+++ Level 3 Heading
++++ Level 4 Heading
+++++ Level 5 Heading
++++++ Level 6 Heading

//emphasis text//
**strong text**
//**emphasis and strong**//
@@--- delete text +++ insert text @@
[[toc]]
----
* Bullet one
 * Sub-bullet

# Number one
 * Bullet
 * Bullet
# Number two
 * Bullet
 * Bullet
  * Sub-bullet
   # Sub-sub-number
   # Sub-sub-number
# Number three
 * Bullet
 * Bullet

This is normal text here.

> Indent me! The quick brown fox jumps over the lazy dog. \
Now this the time for all good men to come to the aid of \
their country. Notice how we can continue the block-quote \
in the same \"paragraph\" by using a backslash at the end of \
the line.
>
> Another block, leading to...
>> Second level of indenting.  This second is indented even \
more than the previous one.

Back to normal text.

WikiPage
";

// create a Wiki objext with the loaded options
$wiki = new Text_Wiki($options);

// transform the wiki text.
echo $wiki->transform($wikitext);
?>

ecco il risultato eccellente della classe senza l'opzione al costruttore:

<h3 id="toc0">Level 3 Heading</h3>

<h4 id="toc1">Level 4 Heading</h4>

<h5 id="toc2">Level 5 Heading</h5>

<h6 id="toc3">Level 6 Heading</h6>
<p><em>emphasis text</em><br />
<strong>strong text</strong><br />
<em><strong>emphasis and strong</strong></em><br />

<del> delete text </del><ins> insert text </ins><br />
<table border="0" cellspacing="0" cellpadding="0"><tr><td>
<div id="toc"><strong>Table of Contents</strong>
   <div style="margin-left: 1em;"><a href="#toc0">Level 3 Heading</a></div>
   <div style="margin-left: 2em;"><a href="#toc1">Level 4 Heading</a></div>
   <div style="margin-left: 3em;"><a href="#toc2">Level 5 Heading</a></div>

   <div style="margin-left: 4em;"><a href="#toc3">Level 6 Heading</a></div>
</div>
</td></tr></table>

<br />
<hr />
</p>

<ul>
    <li>Bullet one<ul>
        <li>Sub-bullet</li>

    </ul></li>
</ul>

<ol>
    <li>Number one<ul>
        <li>Bullet</li>
        <li>Bullet</li>
    </ul></li>
    <li>Number two<ul>

        <li>Bullet</li>
        <li>Bullet<ul>
            <li>Sub-bullet<ol>
                <li>Sub-sub-number</li>
                <li>Sub-sub-number</li>
            </ol></li>

        </ul></li>
    </ul></li>
    <li>Number three<ul>
        <li>Bullet</li>
        <li>Bullet</li>
    </ul></li>
</ol>

<p>This is normal text here.</p>

<blockquote><p>Indent me! The quick brown fox jumps over the lazy dog. Now this the time for all good men to come to the aid of their country. Notice how we can continue the block-quote in the same &quot;paragraph&quot; by using a backslash at the end of the line.<br />
Another block, leading to...</p>

    <blockquote><p>Second level of indenting.  This second is indented even more than the previous one.</p>

    </blockquote>

</blockquote>
<p>Back to normal text.</p>

<p>WikiPage<a href="http://example.com/new.php?page=WikiPage">?</a></p>

 :bye:

risposto 10 anni fa
ulisse
X 0 X

vorrei aggiungere una cosina a ciò che è stato detto. Questo parser riconosce anche i ritorni a capo? Ho provato a utilizzare un testo semplice con degli accapo qua e là nel testo. Mi ha riunito tutto ignorando gli accapo. Che fare?  :bye:

risposto 10 anni fa
ulisse
X 0 X

Mi sembra strano, nell'esempio di "traduzione" che hai riportato ho visto i tag <p> quindi suppongo che stia rispettando gli "a capo", o no?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Tutto risolto

Grazie  :bye:

risposto 10 anni fa
ulisse
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda