част от стринг

stoqnski

Registered
Здравейте , имам следния проблем :
Имам един стринг с информация:

$str = ' Tova e mnenieto s kartinkata [img:3pqqhlc0]https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/565218_100000028970415_510433711_n.jpg[/img:3pqqhlc0] ';

как да взимам линк-а(винаги ще е линк) между ] & [ ?
това [img:3pqqhlc0] - случайните букви е някакъв тип кодиране и винаги е различно примерно [img:53okslfkoas] ( този стринг е равен на едно поле от една база данни по принцип и винаги ще изкарва различно [img:????] , но винаги между тези две скоби ] & [ се има линк , въпроса ми е как да взимам този линк :) )
 
Ако този код в скобите е с постоянна дължина е лесно:
substr($str,1,12);
И това ще отреже стринга от едната скоба до другата(без да ги включва,но разбира се ти можеш да си го направиш,както искаш) и ще върне:
img:3pqqhlc0
П.С - Сега прочетох,че го генерираш този код случайно.В такъв случай,ако някой се сеща нещо по-добро,да каже.Иначе ще трябва да ограничиш дължината на генерирания стринг,за да е постоянна и да ползваш substr.
П.С 2 - Извинявам се.Съвсем не съм те разбрал.В такъв случай,това което търсиш би трябвало да е постнатото от madmax.
 
fbian каза:
Ако този код в скобите е с постоянна дължина е лесно:
substr($str,1,12);
И това ще отреже стринга от едната скоба до другата(без да ги включва,но разбира се ти можеш да си го направиш,както искаш) и ще върне:
img:3pqqhlc0
П.С - Сега прочетох,че го генерираш този код случайно.В такъв случай,ако някой се сеща нещо по-добро,да каже.Иначе ще трябва да ограничиш дължината на генерирания стринг,за да е постоянна и да ползваш substr.

линка в скобите винаги е различен , но е линк , но ми трябва съдържанието между [img: xxx]това[/img:xxx]

в червено да изчезва текста , а в зелено да остава ...
 
Най-елементарното решение:

$str = ' Tova e mnenieto s kartinkata [img:3pqqhlc0]https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/565218_100000028970415_510433711_n.jpg[/img:3pqqhlc0] ';


$p1 = explode("]", $str);

$p2 = explode("[", $p1[1]);

echo $p2[0];


За по-елегантно решение може да използваш регулярни изрази.
 
madmax3_ каза:
Най-елементарното решение:

$str = ' Tova e mnenieto s kartinkata [img:3pqqhlc0]https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/565218_100000028970415_510433711_n.jpg[/img:3pqqhlc0] ';


$p1 = explode("]", $str);

$p2 = explode("[", $p1[1]);

echo $p2[0];


За по-елегантно решение може да използваш регулярни изрази.

а как да добавя един IF ако няма ]http: [ в стринг-а да изкарва друг линк ?
или нещо подобно ..
 
madmax3_ каза:
if (substr($p2[0],0,4) == "http") { ... } else { ... друг линк ...}

ще ти дам точката ама като няма в стринг-а това ми вади "else-a" , но ми дава такава грешка:

Notice: Undefined offset: 1 in C:\xampp\htdocs\testing.php on line 3

ето код:

PHP:
   $str = "$row[post_text]";
$p1 = explode("]", $str);
$p2 = explode("[", $p1[1]);

 echo "<img src="";
	if (substr($p2[0],0,4) == "http") { echo "$p2[0]"; } else { echo "http://www.asoglas.com/templates/images/avatar.jpg";}
	echo "" border="0px"/></a> <br /><br />
 
Какво като няма ? Бъди малко по-ясен.

EDIT:

Пробвай това:

$q = ' Tova e mnenieto s kartinkata [img:3pqqhlc0]https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/565218_100000028970415_510433711_n.jpg[/img:3pqqhlc0] ';

$n = preg_match('/(.*?)\[(.*?)\](.*?)\[(.*?)\]/si', $q, $m);

$src = preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*:)[0-9]+)?(/.*)?$|i', $m[3])?$m[3]:"http://site.com/path/to/files/noimage.jpg";

echo $src;
 

Горе