2012-01-16 57 views
1

我使用这个成功php substr - 如何在开始substr之前找到<br>?

$str = "{source}do_something"; 
if(substr($str, 0, 8) == "{source}") 

,但如果我

$str = "<br><br>{source}do_something"; 

的目标是能够增加空行(多达需要)发射前的我该怎么办我的do_something

感谢

编辑

好了,所以我需要运行功能

菜单;垂直,真正

,但我还需要我的菜单前有那些空白行

我的字符串是

<br><br><br><div>{source}_menu_;vertical,true{/source}</div> 

没有换行符我用

if(substr($pos, 0, 8) == "{source}") { 
    $campos = substr_replace($description, '', 0, 8); 
    $campos = substr($campos, 0, -9); 
    $funcao = explode(";", $campos); 
    call_user_func_array($funcao[0], array($funcao[1])); 
} 

现在我需要同样的东西,但换行符,所以浏览器实际上呈现换行符,然后运行该功能。

我希望我的英语不够好,搞清楚......

感谢

新的编辑与解决方案

$startTag = "{source}"; 
$endTag = "{/source}"; 
$initial_strpos = strpos($str, $startTag); 
$final_strpos = strpos($str, $endTag); 
if ($initial_strpos !== false) { 
    $beforeTag = substr($str, 0, $initial_strpos); 
    echo htmlspecialchars_decode($beforeTag, ENT_QUOTES); 
    $start = $initial_strpos + strlen($startTag); 
    $innerText = substr($str, $start, strpos($str, $endTag)-$start); 
    $funcao = explode(";", $innerText); 
    call_user_func_array(array_shift($funcao), $funcao); 
    $aferTag = strpos($str, $final_strpos); 
    echo htmlspecialchars_decode($aferTag, ENT_QUOTES); 
} 

会打印出我的换行和运行我的功能。

+2

您可以在运行'strip_tags()'之后比较字符串 - 如果这对您有用。目前尚不完全清楚您的最终目标是什么 – 2012-01-16 14:03:01

+0

您是否试图在大括号'{'和'}'之间提取字符串? – anubhava 2012-01-16 14:03:05

+0

确切地说,我的目标是运行名称在{source}内的函数,如


{source}_menu_;vertical,true{/source}
Pluda 2012-01-16 14:12:57

回答

1

如果你有专门检查前8个字符,那么你应该从字符串删除<br>在做字串前面:

if (substr(str_replace("<br>", "", $str), 0, 8) == "{source}") 

如果字符串略有不同这是行不通的,即<br /> 。要做到这一点,最好的办法可能会是:

if (strpos($str, "{source}") !== false) 

编辑

这个怎么样?它应该获得{source}{/source}标签之间的文本,并将它们拆分为;,然后将第一个条目作为函数名称,将第二个条目作为函数的参数。

$startTag = "{source}"; 
$endTag = "{/source}"; 
$strpos = strpos($str, $startTag); 
if ($strpos !== false) 
{ 
    $start = $strpos + strlen($startTag); 
    $innerText = substr($str, $start, strpos($str, $endTag)-$start); 
    list($functionName, $parameters) = explode(";", $innerText); 
    call_user_func_array($functionName, explode(",", $parameters)); 
} 
+0

我编辑我的问题 – Pluda 2012-01-16 14:25:07

+0

好的,你的答复几乎是正确的,或者是正确的,但它缺少initial_strpos和final_strpos,所以我们可以打印什么之前,函数和什么是后。我要重新编辑我的问题,让所有人都可以访问。谢谢 – Pluda 2012-01-16 15:15:22

1

见strrpos手册:http://de.php.net/manual/en/function.strrpos.php

所以,你可以findout BR-标签的位置。 $from

$from = 1 + stripos($str, "{"); 
$to = stripos($str, "}", $from) - 1; 
$your_string = substr($str, $from, $end - $from + 1); 

当然,你应该检查这两个指标(和:

2

你可以尝试使用strrpos
你可以尝试这样的:

$pos = strrpos($str, "{source}"); 
if ($pos === false) { // note: three equal signs 
    // not found... 
} else { 
    // found 
} 

新的评论后可进行编辑$to)都可以,但这个例子应该给你一个想法...

+0

@Pluda:我看到了您的评论并编辑了我的答案。希望它有帮助... – Marco 2012-01-16 14:18:02

+0

谢谢,我刚刚编辑我的问题 – Pluda 2012-01-16 14:26:22