preg_replace
13 отговора
263 прегледа
preg_replace
Имам проблем който преполагам че не е много сложен, но аз не успях да се справя сам .. :)
Имам следнито нещо:
Function MakeURL($href){
global $mi;
if (ereg("\?",$href){
$url = "$href&mi=$mi";
}else {
$url = "$href?mi=$mi";
}
return $url;
}
Function Replace($txt){
return preg_replace("/(\[makeurl\])(.*?)(\[\/makeurl\])/s",MakeURL("\\2"),$txt);
}
$text = "[makeurl]index.php?page=main[/makeurl]";
echo Replace($text);
това нещо би трябвало да върне нещо от сорта на:
index.php?page=main&mi=123
обаче то ми връща следното:
index.php?page=main?mi=123
Някой може ли да ми каже как да го оправя това нещо?:)
unF ..
Имам следнито нещо:
Function MakeURL($href){
global $mi;
if (ereg("\?",$href){
$url = "$href&mi=$mi";
}else {
$url = "$href?mi=$mi";
}
return $url;
}
Function Replace($txt){
return preg_replace("/(\[makeurl\])(.*?)(\[\/makeurl\])/s",MakeURL("\\2"),$txt);
}
$text = "[makeurl]index.php?page=main[/makeurl]";
echo Replace($text);
това нещо би трябвало да върне нещо от сорта на:
index.php?page=main&mi=123
обаче то ми връща следното:
index.php?page=main?mi=123
Някой може ли да ми каже как да го оправя това нещо?:)
unF ..
Re: preg_replace
нищо, ама нищо не разбрах
я опитай да кажеш какво имаш на входа и какво искаш на изхода?
само питанката ли е проблема ?
[линк]
я опитай да кажеш какво имаш на входа и какво искаш на изхода?
само питанката ли е проблема ?
[линк]
Re: preg_replace
Идеята е следната:
MakeURL($url) проверява дали в $url има ? и ако има ми връща $url&mi=$mi иначе ми връща $url?mi=$mi .. обаче когато го ползвам в preg_match по начина който показах в пърия пост проверката за ? връща false въпреки че има ? ..
Пробвах да правя тази проверка по друг начин но пак нищо не излезе .. :(
unF ..
MakeURL($url) проверява дали в $url има ? и ако има ми връща $url&mi=$mi иначе ми връща $url?mi=$mi .. обаче когато го ползвам в preg_match по начина който показах в пърия пост проверката за ? връща false въпреки че има ? ..
Пробвах да правя тази проверка по друг начин но пак нищо не излезе .. :(
unF ..
Re: preg_replace
в условието имаш една изпусната затваряща скоба
при мен печати точно това, което се очаква......
PS
почвам да стоплям....
ифа работи правилно...но останалото - не
при мен печати точно това, което се очаква......
PS
почвам да стоплям....
ифа работи правилно...но останалото - не
Редактирано от Topбaлaн на
Re: preg_replace
Пуснете това:
<?
$mi = "123";
Function MakeURL($href){
global $mi;
if (ereg("\?",$href)){
$url = "$href&mi=$mi";
}else {
$url = "$href?mi=$mi";
}
return $url;
}
Function Replace($txt){
return preg_replace("/(\[makeurl\])(.*?)(\[\/makeurl\])/s",MakeURL('$2'),$txt);
}
$s = "index.php";
$s1 = "index.php?page=main";
$str = "[makeurl]".$s."[/makeurl]";
$str1 = "[makeurl]".$s1."[/makeurl]";
echo Replace($str);
echo Replace($str1);
echo MakeURL($s);
echo MakeURL($s1);
?>
.. предполагам че така ще ви стане ясно .. :)
unF ..
<?
$mi = "123";
Function MakeURL($href){
global $mi;
if (ereg("\?",$href)){
$url = "$href&mi=$mi";
}else {
$url = "$href?mi=$mi";
}
return $url;
}
Function Replace($txt){
return preg_replace("/(\[makeurl\])(.*?)(\[\/makeurl\])/s",MakeURL('$2'),$txt);
}
$s = "index.php";
$s1 = "index.php?page=main";
$str = "[makeurl]".$s."[/makeurl]";
$str1 = "[makeurl]".$s1."[/makeurl]";
echo Replace($str);
echo Replace($str1);
echo MakeURL($s);
echo MakeURL($s1);
?>
.. предполагам че така ще ви стане ясно .. :)
unF ..
Re: preg_replace
аз джиткам с дебъгер....много по-лесно ми е ;-)
когато викаш Function MakeURL($href) параметъра $href има стойност "\2" не знам какво очакваш от тук нататък ;-)
[линк]
когато викаш Function MakeURL($href) параметъра $href има стойност "\2" не знам какво очакваш от тук нататък ;-)
[линк]
Re: preg_replace
не разбирам афинитета към регулярните изрази (специално за MakeURL) ...
направи го простичко със strpos ...
направи го простичко със strpos ...
Re: preg_replace
еее, ама как така
там, дето е на друг ред има <бр>-та
бтв защо не ползваш вградените функции от рода на parse_url, най-малкото ще ти спестят "обикалянето" около всички странични проверки
$test = 21;
function makeURI($href) {
return (strpos($href, '?') === false) ? $href .'?test='. $GLOBALS['test'] : $href .'&test='. $GLOBALS['test'];
}
echo '
'. makeURI('[линк]');
echo '
'. makeURI('[линк]');
там, дето е на друг ред има <бр>-та
бтв защо не ползваш вградените функции от рода на parse_url, най-малкото ще ти спестят "обикалянето" около всички странични проверки
Re: preg_replace
и така нестава .. като го изпозвам в preg_replace пак същото става .. :)
unF ..
unF ..
Re: preg_replace
$pos=str_pos($url,"?");
$url=sub_str($url,0,$pos).$str_replace("?","&",sub_str($url,$pos+1));
бах си ... като индиански стил :))
-----------------------
гърбавия, ковчег ще го изправи
$url=sub_str($url,0,$pos).$str_replace("?","&",sub_str($url,$pos+1));
бах си ... като индиански стил :))
-----------------------
гърбавия, ковчег ще го изправи
Re: preg_replace
най-накрая разбрах къде ти е болката
въпреки че не бих го направил по този начин (имам в предвид реализирането на нещо от рода на bbcode), този специфичен твой проблем можеш да го разрешиш така
<?php
$test = 21;
function makeURI($matches) {
return (strpos($matches[1], '?') === false) ? $matches[1] .'?test='. $GLOBALS['test'] : $matches[1] .'&test='. $GLOBALS['test'];
}
function parseText($text) {
return preg_replace_callback('|\[makeuri\](.*)\[\/makeuri\]|Ui', 'makeURI', $text);
}
$testText='[makeuri][линк][/makeuri]
тука имаше <бр>[makeuri][линк][/makeuri]';
echo parseText($testText);
?>
въпреки че не бих го направил по този начин (имам в предвид реализирането на нещо от рода на bbcode), този специфичен твой проблем можеш да го разрешиш така
<?php
$test = 21;
function makeURI($matches) {
return (strpos($matches[1], '?') === false) ? $matches[1] .'?test='. $GLOBALS['test'] : $matches[1] .'&test='. $GLOBALS['test'];
}
function parseText($text) {
return preg_replace_callback('|\[makeuri\](.*)\[\/makeuri\]|Ui', 'makeURI', $text);
}
$testText='[makeuri][линк][/makeuri]
тука имаше <бр>[makeuri][линк][/makeuri]';
echo parseText($testText);
?>
и аз да се разпиша
<?
$mi = 42;
function make_url($url) {
global $mi;
$my_query = "mi=$mi";
$a = parse_url($url);
if ($a['scheme']) $ret .= $a['scheme']."://";
if ($a['user']) $ret .= $a['user'].":".$a['pass']."@";
if ($a['host']) $ret .= $a['host'];
if ($a['path']) $ret .= $a['path'];
if ($a['query'])
$ret .= "?".$a['query']."&".$my_query;
else
$ret .= "?".$my_query;
if ($a['fragment']) $ret .= "#".$a['fragment'];
return $ret;
}
$txt = "Some URL to visit: [makeurl][линк][/makeurl]. And this one too: [makeurl][линк][/makeurl]...what do you think?";
echo preg_replace("#\[makeurl\](.*?)\[/makeurl\]#e", "make_url('$1')", $txt);
?>
Така печелиш бързина от parse_url, иначе можеш да си го направиш всичкото и в един preg_replace, просто независимо дали има ? или няма, слагай ръчно ? след това query-то, ако го има, и след това &mi=$mi. В най-лошия случай ще имаш index.php?&mi=$mi, което си е съвсем ОК.
Everything louder than everything else...
Re: и аз да се разпиша
Мерси на всички .. оправих мазалото ;)
Имате по бира :)
unF ..
Имате по бира :)
unF ..