webForumDet fria alternativet

Problem med back reference i preg_replace

6 svar · 359 visningar · startad av learn

learnMedlem sedan jan. 20051 143 inlägg
#1

Jag har ett problem med preg_replace när jag använder backreference $.

Följande script...

$value= $_POST["namn"];

$str = "<input type=\"text\" name=\"namn\" value=\"\" />";

$new_str = preg_replace("/(\<input(.*?)name\=\"namn\"(.*?)value\=\")(\")/", "$1$value$4", $str);

echo $str;
echo "<br>";
echo $new_str;

...får följande resultat när $_POST["namn"] = "Oskar":

<input type="text" name="namn" value="" />
<input type="text" name="namn" value="Oskar" />

Precis som jag önskar!

MEN om $_POST["namn"] = "666" (eller andra siffror) så blir det knas:

<input type="text" name="namn" value="" />
66" />

Jag har lyckats luska ut att det har att göra med min backreference, den blir ju i detta fall så här:

$new_str = preg_replace("/(\<input(.*?)name\=\"namn\"(.*?)value\=\")(\")/", "$1666$4", $str);

Eller? Hur kan jag komma runt detta?

learnMedlem sedan jan. 20051 143 inlägg
#2

Någon som vet?

Förmodligen är det en jätteenkel lösning...men jag kommer inte på den....

Som sagt funkar det kanon så länge $_POST["namn"] börjar med en bokstav, men är det en siffra blir det knaaaas!

Snälla :)

learnMedlem sedan jan. 20051 143 inlägg
#3

learn skrev:

Någon som vet?

Förmodligen är det en jätteenkel lösning...men jag kommer inte på den....

Som sagt funkar det kanon så länge $_POST["namn"] börjar med en bokstav, men är det en siffra blir det knaaaas!

Snälla :)

Hur ska jag göra? Det står helt still...! :(

learnMedlem sedan jan. 20051 143 inlägg
#4

Problemet ligger kanske inte i preg_replace utan hanteringen av strängen (som i detta fall blir siffror)... A, jag har iaf ingen aning om hur man kan lösa detta...!

Det måste ju finnas någon PHP-smart här omkring? ;)

Peter SMedlem sedan dec. 20025 484 inlägg
#5

${1}$value$4

learnMedlem sedan jan. 20051 143 inlägg
#6

Peter S skrev:

${1}$value$4

Hmm, nä. Då följer inte den första backreferencen $1 med ens när $_POST["namn"] börjar med en bokstav....

$replacement = "${1}$value$4";

Är det någon speciell modifiersom krävs för detta?

learnMedlem sedan jan. 20051 143 inlägg
#7

Ahh. Detta verkar funka:

$replacement = '${1}'.$value.'$4';

Det var alltså "fnuttarna" det var fel på... :)

Tack!

Genererad på 368 ms · cache AV · v20260730165559-full.f96bc7eb