PDA

Bekijk Volledige Versie : PHP wordwrap()



Catharina
29/04/03, 22:50
Ik wil graag een php scriptje laten draaien op een server waar PHP 4.0.0
is geïnstalleerd. In mijn script komt de volgende functie voor:

function divideWord($content,$maxWordLength = "30")
{
return wordwrap($content, $maxWordLength, " ", 1);
}

Dit geeft een fatal error undefined function wordwrap.
Bij phpfreaks.com lees ik dat dat wel kan kloppen, want wordwrap is
aanwezig in versies > dan 4.0, maar ik kan niet ontdekken wat ik nu zou
kunnen wijzigen in bovenstaande functie zodat het wel werkt met versie
4.0.0. Iemand die mij op weg kan helpen?


CC
--
cathdesign.nl

Wimjan in niwo: 'Even een korte uitleg voor eventueel aanwezige
azijnpissers: ja, ik denk dat deze vraag relevant is in niwo'

Daniel Tryba
30/04/03, 00:05
Catharina <news@xxcathdesign.nl> wrote:
[wordwrap en php 4.0.0]
> Dit geeft een fatal error undefined function wordwrap.
> Bij phpfreaks.com lees ik dat dat wel kan kloppen, want wordwrap is
> aanwezig in versies > dan 4.0, maar ik kan niet ontdekken wat ik nu zou
> kunnen wijzigen in bovenstaande functie zodat het wel werkt met versie
> 4.0.0. Iemand die mij op weg kan helpen?

4.0.0 is oude zooi en daar zitten vast wel enkele security leaks in, por
de beheerder eens om te upgraden :)

Als dat niet werkt kan je natuurlijk zelf eenvoudig een recursieve
functie schrijven die wordwrap() voor je emuleert. Maar om een lang
verhaal kort te maken een voorbeelde je van een een MyWrap class (en nu
maar hopen dat PHP 4.0.0 deze class snapt):

<?php
class MyWrap
{
/*
*Simpele wordwrap class
*
*Deze class is vrij te gebruiken onder de beer license.
*
* Daniel Tryba
*/
var $storage=array();
var $str;
var $width;
var $break;
var $cut;
var $wrapped;

function MyWrap($str,$width=75,$break="\n",$cut=false)
{
$this->str=$str;
$this->width=$width;
$this->break=$break;
$this->cut=$cut;

if(strlen($this->str)>$this->width)
{
$this->wrap();

$this->wrapped=implode($this->break,$this->storage);
}
else
{
$this->wrapped=$this->str;
}
}

function wrap()
{
if(!$this->cut)
{
//not implemented
$this->storage[]=$this->str;
}
else
{
do
{
$this->storage[]=substr($this->str,0,$this->width);
$this->str=substr($this->str,$this->width);
}
while(strlen($this->str)>$this->width);

$this->storage[]=$this->str;
}
}
}

$tst="12345678901234567890123456789012345678901234567890 1234567890";

echo "orig:\n$tst\n";
echo "wordwrap:\n".wordwrap($tst,30,"\n",1)."\n";

$wrap=new MyWrap($tst,30,"\n",1);
echo "MyWrap:\n{$wrap->wrapped}\n";

?>

Output:
X-Powered-By: PHP/4.1.2
Content-type: text/html

orig:
12345678901234567890123456789012345678901234567890 1234567890
wordwrap:
123456789012345678901234567890
123456789012345678901234567890

MyWrap:
123456789012345678901234567890
123456789012345678901234567890

--

Daniel Tryba

Catharina
30/04/03, 00:50
Daniel Tryba schreef :

> Catharina <news@xxcathdesign.nl> wrote:
> [wordwrap en php 4.0.0]
>
> 4.0.0 is oude zooi en daar zitten vast wel enkele security leaks in, por
> de beheerder eens om te upgraden :)

Hoi Daniel,

ik denk niet dat dit zin zal hebben, het gaat hier om een gratis provider
die ik gebruik om een beetje te testen en wat aan te klooien ;-)
>
> Als dat niet werkt kan je natuurlijk zelf eenvoudig een recursieve
> functie schrijven die wordwrap() voor je emuleert.

Je? Ehh.. Ja, *jij* wel.. :'-|

> Maar om een lang
> verhaal kort te maken een voorbeelde je van een een MyWrap class (en nu
> maar hopen dat PHP 4.0.0 deze class snapt):

<knip code..>

Dank je wel Daniel! :-)
Ik ga het gelijk even uitproberen.

CC
--
cathdesign.nl

Mike in niwo: 'jammer dat die 'regulars' de meest eenvoudige vragen niet
schijnen te snappen'

Catharina
30/04/03, 01:20
Daniel Tryba schreef :

> Catharina <news@xxcathdesign.nl> wrote:
> [wordwrap en php 4.0.0]
>
> Als dat niet werkt kan je natuurlijk zelf eenvoudig een recursieve
> functie schrijven die wordwrap() voor je emuleert. Maar om een lang
> verhaal kort te maken een voorbeelde je van een een MyWrap class (en nu
> maar hopen dat PHP 4.0.0 deze class snapt):

Of ik doe iets blonds (wat niet uitgesloten is) of PHP 4.0.0 snapt het
niet (mijn voorkeur gaat uit naar het eerste ;-)

Nu krijg ik dit: Fatal error: Call to undefined function: mywrap()

Wat ik heb gedaan is dit (bovenaan) toegevoegd:

class MyWrap
{
/*
*Simpele wordwrap class
*
*Deze class is vrij te gebruiken onder de beer license.
*
* Daniel Tryba
*/
var $storage=array();
var $str;
var $width;
var $break;
var $cut;
var $wrapped;

function MyWrap($str,$width=75,$break="\n",$cut=false)
{
$this->str=$str;
$this->width=$width;
$this->break=$break;
$this->cut=$cut;

if(strlen($this->str)>$this->width)
{
$this->wrap();

$this->wrapped=implode($this->break,$this->storage);
}
else
{
$this->wrapped=$this->str;
}
}

function wrap()
{
if(!$this->cut)
{
//not implemented
$this->storage[]=$this->str;
}
else
{
do
{
$this->storage[]=substr($this->str,0,$this->width);
$this->str=substr($this->str,$this->width);
}
while(strlen($this->str)>$this->width);

$this->storage[]=$this->str;
}
}
}


En vervolgens die bewuste functie op deze manier aangepast:

function divideWord($content,$maxWordLength = "30")
{
return MyWrap($content, $maxWordLength, " ", 1);
}

Als iemand in e1n oogopslag ziet of ik iets en/of wat ik hier fout heb
gedaan.. Ik ga in ieder geval nu eerst maar even slapen.

CC
--
cathdesign.nl

Rijk van Geijtenbeek in niwo: 'Overigens is het weghalen van scrollbars
slechts zelden een nuttige bezigheid'

Daniel Tryba
30/04/03, 01:35
Catharina <news@xxcathdesign.nl> wrote:
> Of ik doe iets blonds (wat niet uitgesloten is) of PHP 4.0.0 snapt het
> niet (mijn voorkeur gaat uit naar het eerste ;-)
>
> Nu krijg ik dit: Fatal error: Call to undefined function: mywrap()
>
> Wat ik heb gedaan is dit (bovenaan) toegevoegd:
>
> class MyWrap
> {
[knip]
> }
>
>
> En vervolgens die bewuste functie op deze manier aangepast:
>
> function divideWord($content,$maxWordLength = "30")
> {
> return MyWrap($content, $maxWordLength, " ", 1);
> }

> Als iemand in e1n oogopslag ziet of ik iets en/of wat ik hier fout heb
> gedaan.. Ik ga in ieder geval nu eerst maar even slapen.

Ik gok op blond, want een class werkt zo niet. :)

MyWrap is een class definitie, je moet eerst een instantie van die
classe creeren met bv:

$wrap=new MyWrap($content,$maxWordLength, " ",1);

De voorbeeld classe doet in de constructor (de functie MyWrap in de
class) al het benodigde werk en slaat het resultaat op in de variabele
wrapped in de class, die haal je eruit met $wrap->wrapped.

Je divideWord function moet dan worden:

function divideWord($content,$maxWordLength = "30")
{
$wrap=new MyWrap($content,$maxWordLength," ",1);
return $wrap->wrapped;
}

--

Daniel Tryba

Catharina
30/04/03, 13:20
Daniel Tryba schreef :

> Catharina <news@xxcathdesign.nl> wrote:
> > Of ik doe iets blonds (wat niet uitgesloten is) of PHP 4.0.0 snapt het
> > niet (mijn voorkeur gaat uit naar het eerste ;-)
> >
> [knipperdeknip CC's gepruts]
>
> Ik gok op blond, want een class werkt zo niet. :)
> [..]
> De voorbeeld classe doet in de constructor (de functie MyWrap in de
> class) al het benodigde werk en slaat het resultaat op in de variabele
> wrapped in de class, die haal je eruit met $wrap->wrapped.
>
> Je divideWord function moet dan worden:
> [..]

Dank je wel Daniel, nu werkt het!

CC (blond & blij ;-)
--
cathdesign.nl

Yippee in nip: 'Er zijn tijden geweest dat ik ruim over de 2 gig per dag
ging. Maar sinds m'n 8753'e volle CD'R'etje doe ik 't wat rustiger aan.'