» »

PHP - stringi

PHP - stringi

pehape ::

Imam nekaj problemov s stringi, zato prosim za pomoč.

Imam eno textarea, kjer napišeš daljši komentar. Ta komentar lahko vsebuje recimo ->[neko številko] (npr. ->123). Rad bi, da string funkcije poiščejo ta "->123" in ga zamenjajo z novim stringom ki je npr. ->123.

Prvi problem nastane, kadar je character za "->123" recimo tabulator (\t) ali newline (\n) ali space(" ").

Drugi problem pa je, da zamenja amo prvi najdeni string. textarea pa lahko vsebuje več takšnih stringov (npr. test\n->123\n->124\n->125\n->126\ntest).

Torej, moja textarea vsebuje (primer html kode):

//textarea
test
->123
->124
->125
->126
test
//end of textarea

Kar jaz hočem da naredi je to:

//textarea
test
->123
->124
->125
->126
test
//end of textarea

techfreak :) ::

misek ::

$str = "
test
->a888
->123->124
->125
->126
test
";

	echo $str . "\n";
	echo "***\n";
	echo preg_replace('/->([0-9]{1,})/', '<a href="http://www.google.com/">->\\1</a>', $str, 1);
	echo "***\n";
	echo preg_replace('/->([0-9]{1,})/', '<a href="http://www.google.com/">->\\1</a>', $str);

pehape ::

Wow, najlepša hvala obema za tako hiter odgovor. Še posebej misek :)

pehape ::

Zanima me še samo, kaj moram dodati, da če hočem najdit ta string: "->123 123"? s presledkom vmes (da ne upošteva tabulatorja ali newline, ampak samo presledek)

Edit: Hvala vseeno, sem že naredil.

Zgodovina sprememb…

  • spremenil: pehape ()

misek ::

echo preg_replace('/->([0-9]{1,} [0-9]{1,})/', '<a href="http://www.google.com/">->\\1</a>', $str, 1);

pehape ::

misek je izjavil:

echo preg_replace('/->([0-9]{1,} [0-9]{1,})/', '<a href="http://www.google.com/&quot;&gt;-&gt;\\..., $str, 1);

Če uporabim samo to vrstico, potem to ne deluje če hočem najdit "->123".

techfreak :) ::

echo preg_replace('/->([0-9]{1,}( [0-9]{1,}))/', '<a href="http://www.google.com/">->\\1</a>', $str, 1);

pehape ::

Tudi to ne deluje, žal. Kolikor se jas spomnim, se v excelu oz. calcu uporablja + in * na koncu oklepajev, da ponazoriš ali se naj:

- ponovi vsaj enkrat in do neskončno-krat (+),
- ali pa se ni treba pojavit, lahko pa se pojavi neskončno-krat (*),
tako nekako mislim da je.

vendar mi sintaksa ni pravilna.

misek ::

	echo preg_replace('/->([0-9]{1,})( [0-9]{1,})?/', '<a href="http://www.google.com/">->\\1\\2</a>', $str, 1);
	echo "***\n";
	echo preg_replace('/->([0-9]{1,})( [0-9]{1,})?/', '<a href="http://www.google.com/">->\\1\\2</a>', $str);

pehape ::

Imam še en majhen problem. Ko vstavim narekovaj ("), da bi mi ga v stringu zaznalo, mi ga ne. Poskusil sem z [:punct:] (vsebuje simbole kot so npr. !"#$%&/ itd.) in deluje, vendar je problem v tem, da vsebuje nedovoljene simbole, ki nesmejo bit vključeni.

Poskusil sem tudi: [[:punct:]^[znak ki ne sme biti vsebovan]], vendar ne deluje.

Zgodovina sprememb…

  • spremenil: pehape ()

misek ::

Poskusi \".

Kakšen je celoten izraz?

Zgodovina sprememb…

  • spremenil: misek ()

pehape ::

Sem, ne dela.

Celoten izraz je npr: '->To se pobarva, "to pa ne"'
$pattern = '/->([A-Za-zčČšŠžŽđĐćĆë?éËÄÍ,.\" ]{1,})( [a-z]{1,})?/';

Zgodovina sprememb…

  • spremenil: pehape ()

pehape ::

Celoten izraz je npr: '->To se pobarva, "to pa ne"'
$pattern = '/->([A-Za-zčČšŠžŽđĐćĆë?éËÄÍ,.\" ]{1,})( [a-z]{1,})?/';

misek ::

Kaj bi ti sploh rad? Ne razumeme natančno.

pehape ::

imam string '->To se pobarva, "in tudi to"'
Z regex hočem da mi najde ta celoten niz znakov, ki ga kasneje spremeni v link (da mi spremeni v link pa že deluje).

<php 
$string = "->To se pobarva, \"in tudi to\""; //->To se pobarva, "in tudi to"
$string = preg_replace(...);
echo $string; //<a href="www.google.com">->To se pobarva, "in tudi to"</a> 
?>

Zgodovina sprememb…

  • spremenil: pehape ()

misek ::

Tole meni deluje
$str = '
test
->a888
->123->124
->125
->125"
->To se pobarva, "to pa ne"
->125
->123 123
->126
test
';

	echo $str . "\n";
	echo "***\n";
	echo preg_replace('/->([0-9"]{1,})( [0-9]{1,})?/', '<a href="http://www.google.com/">->\\1\\2</a>', $str, 1);
	echo "***\n";
	echo preg_replace('/->([0-9"]{1,})( [0-9]{1,})?/', '<a href="http://www.google.com/">->\\1\\2</a>', $str);
	echo "***\n";
	$pattern = '/->([A-Za-zčČđĐćĆë?éËÄÍ,." ]{1,})( [a-z]{1,})?/';
	echo preg_replace($pattern, '<a href="http://www.google.com/">->\\1\\2</a>', $str);
	echo "***\n";

test
->a888
->123->124
->125
->125"
->To se pobarva, "to pa ne"
->125
->123 123
->126
test

***

test
->a888
<a href="http://www.google.com/">->123</a>->124
->125
->125"
->To se pobarva, "to pa ne"
->125
->123 123
->126
test
***

test
->a888
<a href="http://www.google.com/">->123</a><a href="http://www.google.com/">->124</a>
<a href="http://www.google.com/">->125</a>
<a href="http://www.google.com/">->125"</a>
->To se pobarva, "to pa ne"
<a href="http://www.google.com/">->125</a>
<a href="http://www.google.com/">->123 123</a>
<a href="http://www.google.com/">->126</a>
test
***

test
<a href="http://www.google.com/">->a</a>888
->123->124
->125
->125"
<a href="http://www.google.com/">->To se pobarva, "to pa ne"</a>
->125
->123 123
->126
test
***

Zgodovina sprememb…

  • spremenil: misek ()

pehape ::

Hmm, tvoja koda meni tudi deluje. Ampak jaz ne uporabjam stringa $str kot spremenljivko z nizom znakov, jaz uporabljam textarea in zgleda da zato nedela... Čudno...

misek ::

Izpiši to vhodno vsebino. Morda ti textarea kaj pokvari znake?

pehape ::

Textarea ne bi smela nič pokvarit znake. Znaki se shranijo v spremenljivko $comment
<textarea name="str" cols="20" rows="2"></textarea>
, nato pride do preg_replace, jo shrani v PB in prebere ven.

Vhodna vsebina je pa že znana: ->To se pobarva "in to tudi".

Primer kode, ki ne dela:
<body>
<?

if(isset($_POST['Submit']))
{
	$pattern = '/->([A-Za-zčČđĐćĆë?éËÄÍ,." ]{1,})( [a-z]{1,})?/';
	echo preg_replace($pattern, '<a href="http://www.google.com/">->\\1\\2</a>', $str);
	echo "***\n";
	}
?>
<br/>
<form method="post" action="">
<textarea name="str" cols="20" rows="2"></textarea>
<input name="Submit" type="submit" value="submit" />
</form>
</body>

Zgodovina sprememb…

  • spremenil: pehape ()

misek ::

Izpiši si vsebino v php pred reg.

pehape ::

vpišem: ->lol "lol"
izpis pred preg_replace: ->lol \"lol\"
izpis po preg_replace: ->lol \"lol\"
če v $pattern dodam \" vseeno ne dela...

Zgodovina sprememb…

  • spremenil: pehape ()

misek ::

Moraš dodati \\\\. In to ni v povezavi z ".

Zgodovina sprememb…

  • spremenil: misek ()

pehape ::

Hmm, tega pa ne razumem kaj si mislil s tem. Lahko prosim kopiraš preg_replace?

Edit: Ni važno, dela zdaj :). Najlepša hvala za pomoč.

Zgodovina sprememb…

  • spremenil: pehape ()

misek ::

Le zakaj nisem tega naredil že prej?
$pattern = '/->([A-Za-zčČđĐćĆë?éËÄÍ,."\\\\ ]{1,})( [a-z]{1,})?/';
Torej imaš znak " in \\\\ za iskanje " in \.

Lahko pa bi v vhodnem stringu najprej pretvoril \" v ".

Zgodovina sprememb…

  • spremenil: misek ()

pehape ::

Hvala še enkrat :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Javascript DOM based XSS vulnerability

Oddelek: Programiranje
152825 (2247) MrStein
»

[php] brisanje nedovoljenih znakov

Oddelek: Izdelava spletišč
71433 (1281) keworkian
»

[PHP in/ali JS] skripta, ki gre cez celo stran in zamenja tekst med custom tagi

Oddelek: Izdelava spletišč
51137 (1043) jernejl
»

Regularni izrazi....

Oddelek: Programiranje
352340 (1729) BigWhale
»

[php]: preprost problem in preg_replace()

Oddelek: Izdelava spletišč
61131 (1069) R33D3M33R

Več podobnih tem