webForumDet fria alternativet
Logga in / Bli medlem

använd arrays med eregi_replace

PHP

7 svar · 182 visningar · startad av elvelind

Medlem sedan juli 2002167 inlägg
Trådstart#1

har ett problem med en kodsnutt.

tanken är att den ska hämta en lista med ord från en xml fil. leta igenom en sträng efter dessa och ersätta dem. orden och erstättningssträngarna hämtas in till en array.

if(isset($_POST["textfield"])){
	
	$patterns[0] = "/varg/";
	$patterns[1] = "/elvelind/";
	$patterns[2] = "/html/";
	
	$replacements[0] = "<a href=\"http://cirkeln.net\">\\0</a>";
	$replacements[1] = "<a href=\"http://elendor.com\">\\0</a>";
	$replacements[2] = "<acronym title=\"HyperText Markup Language\">HTML</acronym>";
	
	ksort($replacements);
	ksort($patterns);
	
	echo preg_replace($patterns, $replacements, $_POST["textfield"]);{

delen där den hämtar från xml filen är borttagen och ersatt med enklare kod bara för att visa hur arrayerna ser ut.

denna kod fungerar utmärkt.. dock är den versalkänslig och hittar inte HTML utan bara html.

för att lösa detta testade jag med eregi_replace istället för preg_replace.. men då funkar det inte att använda arrayer av någon anledning..
hjälp :p

Medlem sedan sep. 20021 655 inlägg
#2

Om du ändrar dina patterns ifrån formatet

$patterns[0] = "/varg/";

till

$patterns[0] = "/varg/i";

borde det bli bra.

Medlem sedan juli 2002167 inlägg
#3

fungerar fortfarande inte alls

Medlem sedan sep. 20021 655 inlägg
#4

Jag glömde säga att du ska använda det med preg_replace().
Fungerar det ändå inte?

Medlem sedan juli 2002167 inlägg
#5

fungerar perfekt.. tackar. nu kan jag sova lugnt.

Medlem sedan juli 2002167 inlägg
#6

ett litet till problem.. nu matchar den även ord som är innuti andra ord.. dvs både html och ahtml. testa med
$patterns[2] = "/html[^a-zA-Z0-9]/i"; för att stoppa detta.. men det skapar två problem.
1. den matchar inte ahtml men "html." vilkent är rätt. däremot så blir det problem eftersom även punkten ersätts.
2. den hittar inte html om den ligger sist i strängen och alltså inte har något bakom sig.

Medlem sedan aug. 20002 975 inlägg
#7

Testa det här:

$patterns[2] = "/\bhtml\b/i";
Medlem sedan juli 2002167 inlägg
#8

perfekt. tackar.

253 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)