Bilder i PHP

Tråden skapades och har fått 12 svar. Det senaste inlägget skrevs .
1

Jag har gjort en sida som skall kunna uppdateras av personal som inte kan html. För detta har jag gjort sidan i php & mysql och så långt är saken frid och fröjd. Men jag vill att personalen skall kunna lägga till bilder på ett enkelt sätt typ:

<image>http://www.domän.se/bild.jpg</image>

Hur i all världen bär man sig åt för det? Texterna matas in via en texarea.

/J

Citat:

Skrevs ursprungligen av Jonathan
Jag har gjort en sida som skall kunna uppdateras av personal som inte kan html. För detta har jag gjort sidan i php & mysql och så långt är saken frid och fröjd. Men jag vill att personalen skall kunna lägga till bilder på ett enkelt sätt typ:

<image>http://www.domän.se/bild.jpg</image>

Hur i all världen bär man sig åt för det? Texterna matas in via en texarea.

/J

vad du behöver är ett "regular expresssion" som kollar igenom texten efter en given string och byter ut denna mot html grejs..

till ett par forum jag har kodat ihop har jag kört med den här (hoppas att forumet inte pajjar allt nu):

# [ img ]pic.gif[/ img ] (utan space)
$output = preg_replace("/\[img\](.*?)\[\/img\]/s", "<img src=\"\\1\" alt=\"\\1\" border=\"0\" \/>", $output);

Kanske inte världens snyggaste regex men den funkar...

Tack!

Jag antar att man kan byta ut "img" mot valfritt ord, eller?

J.

absolut

Tack så mycket!

Men det fungerar inte med absoluta URLar

J.

jodå.

vad strular då? vad får du för error msg?
(lättare att veta vad som kan vara fel då )

kanske du har en annan regex som känner av länkar tex?

Jo, jag har fler regex, nämligen:

$tt_body = preg_replace("/((http(s?):\/\/)|(www\.))([\S\.]+)\b/i", "<a href=\"http$3://$4$5\"target=\"_blank\">$2$4$5</a>", $tt_body);
	$tt_body = preg_replace("/([\w\.]+)(@)([\S\.]+)\b/i", "<a href=\" mailto:$0\" >$0</a>", $tt_body); 
	$tt_body = nl2br($tt_body);
	$tt_body = preg_replace("/\[img\](.*?)\[\/img\]/s", "<img src=\"\\1\" alt=\"\\1\" border=\"0\" \/>", $tt_body);

Jag är inte så haj på det här med regex, men kan du se nått som stör?

Jag får inget felmeddelande utan det blir:

[ img ]mypic.gif[/ img ]

J.

ok, först och främst måste det vara utan spaces ([ img ]osv), jag var tvungen att skriva det så, eftersom forumet här verkar använder samma syntax för bilder och därför inte visar det..

sen kommer den förmodligen att kräkas över din absoluta url pga av den byter ut allt som börjar med "http" till en en länk..
så det blir typ <img="<a href="foo.gif>"" /> eller nått sånt, inte bra.

det får vi fixa genom att säga lägga till i din "automagic link" regex att den inte skall göra det om det är en länk i en image tag.

$tt_body = preg_replace("/(?<!\[img\]) ((http(s?):\/\/)|(www\.))([\S\.]+)\b/i", "<a href=\"http$3://$4$5\"target=\"_blank\">$2$4$5</a>", $tt_body);

skulle jag gissa på att det är (ändringarna står i fet still)....
vad som det gör att att om det inte står [ img ] (igen, utan space) framför en länk gör vi ingenting åt den eftersom det kan vara en absolut länkad bild.

Tack så jättemycket!
Du är suverän!

J.

no worries.

faktiskt så har jag fortfarande lite problem med regex då och då, synd det inte verkar finnas en version av http://weitz.de/regex-coach/ för osx.. :/

förresten, skulle vilja rekommendera att du slog ihop allt det där i en funktion, så slipper du skriva samma sak om och om igen..

function returnOutput($text) {	
	$output = nl2br($text);
	$output = preg_replace("/(?<!\[img\]) ((http(s?):\/\/)|(www\.))([\S\.]+)\b/i", "<a href=\"http$3://$4$5\"target=\"_blank\">$2$4$5</a>", $output);
	$output = preg_replace("/([\w\.]+)(@)([\S\.]+)\b/i", "<a href=\" mailto:$0\" >$0</a>", $output); 	
	$output = preg_replace("/\[img\](.*?)\[\/img\]/s", "<img src=\"\\1\" alt=\"\\1\" border=\"0\" \/>", $output);

	return $output;
}

då kan du bara göra så här varje gång du skall göra det:
$tt_body = returnOutput($tt_body);

I min pågående strävan att etablera Lasso som världsdominerande middleware genom att ideligen påpeka för alla PHP-utvecklare hur mycket lättare det är på "andra sidan" (Don't be afraid, join us! ) så kommer här ytterligare ett exempel. Nedanstående gör samma sak som regexp-tjosanet ovan, fast i Lasso:

[String_Replace:_(Field:'Textfield'),
__-Find='[Image]',
__-Replace='<IMG SRC="']

Det ovanstående är ena sättet, varje gång du skall skriva ut ditt fält så gör du det genom ovanstående. Sedan behöver du en till för [/Image].

Närmare beskrivning:
http://ldml.blueworld.com/LDMLReference.0.LassoApp?tag=266

Det andra sättet är att köra ett RegExp

http://ldml.blueworld.com/LDMLReference.0.LassoApp?tag=557

Exempel: [String_FindRegExp:_String_Value,
__-Find=Regular_Expression,
__-IgnoreCase]

Sedan kan man filosofera om det är bättre att lagra artikeln i databasen med texten utbytt, eller om det är bättre att byta ut den varenda gång som artikeln ifråga skall visas. Röstar på det förra, så då får man skriva det hela lite annorlunda, dvs köra RegExpet före man petar in det hela i databasen, eller göra två anrop.

/Ola
Edit: Ändrade tokig meningsbyggnad.

Senast redigerat 2003-06-30 15:44
Citat:

Skrevs ursprungligen av Taz_1999
Sedan kan man filosofera om det är bättre att lagra artikeln i databasen med texten utbytt, eller om det är bättre att byta ut den varenda gång som artikeln ifråga skall visas. Röstar på det förra, så då får man skriva det hela lite annorlunda, dvs köra RegExpet före man petar in det hela i databasen, eller göra två anrop.
/Ola

eftersom det verkar vara en sorts CMS jonathan håller på med vore det nog bäst att ändra det vid "utplockning" ifrån db, eftersom då slippar han omvandla det tillbaka till hans taggar om en klient skall redigerar vad som ligger i db'n..

lasso uttalar jag mig inte om

1
Bevaka tråden