2012-09-20 51 views
-1

是什麼功能是指查詢有關一個PHP函數

function entre2v2($text,$marqueurDebutLien,$marqueurFinLien) 

{ 

$ar0=explode($marqueurDebutLien, $text); 
$ar1=explode($marqueurFinLien, $ar0[1]); 
$ar=trim($ar1[0]); 
return $ar; 
} 

在上面的代碼$文本是指一個文本文件中的內容,這是由下面的代碼從一種形式後獲得:

$text=file_get_contents($_POST['file']); 

有誰能夠請描述關於提到的PHP函數?我不明白這兩個變量的手段

$marqueurFinLien 
$marqueurDebutLien 

根據第一個答案,我嘗試了。但它顯示錯誤。

Warning: Missing argument 3 for entre2v2(), called in C:\xampp\htdocs\php\test.php on line 5 and defined in C:\xampp\htdocs\php\test.php on line 13 

Notice: Undefined variable: marqueurFinLien in C:\xampp\htdocs\php\test.php on line 18 

Notice: Undefined offset: 1 in C:\xampp\htdocs\php\test.php on line 18 

Warning: explode() [function.explode]: Empty delimiter in C:\xampp\htdocs\php\test.php on line 18 

當我用follwing:

<? 

$text=file_get_contents('http://localhost/php/w.txt'); 

$name=entre2v2($text,"DB_USER', ',');"); 


echo($name); 
echo("<br>"); 



function entre2v2($text,$marqueurDebutLien,$marqueurFinLien) 

{ 

$ar0=explode($marqueurDebutLien, $text); 
$ar1=explode($marqueurFinLien, $ar0[1]); 
$ar=trim($ar1[0]); 
return $ar; 
} 

?> 
+0

$ firstLinkMarker和$ lastLinkMarker是否有幫助? – RobMasters

+0

我想指出的代碼這一行: '的file_get_contents($ _ POST [ '文件']);' 這可以很容易地通過發送利用一個POST HTTP請求到這個Web文件並傳入一個文件路徑來說,例如在你的操作系統中。記住孩子們:總是消毒用戶生成的輸入,不要相信它! –

+0

'($ text,「DB_USER」,',');「);'=>'($ text,'DB_USER',',');'。你在這裏發送一個字符串,它需要兩個分隔符。 – raina77ow

回答

1

的功能似乎從輸入$text返回$marqueurDebutLien$marqueurFinLien串之間的文本。

例如

$text = "abcdefghijklmnop"; 
$result = entre2v2($text, 'd', 'lmn'); // will return 'efghijk' 
+0

這兩個功能是什麼意思? $ marqueurFinLien $ marqueurDebutLien –

+0

查看我對您的問題的原始評論。儘管他們被稱爲......但是他們可以稱爲$ banana和$ badger,因爲它們會產生所有的不同。重要的是他們在做什麼,我試圖說清楚。 – RobMasters

+0

thnx讓我清楚。請告訴,這部分是什麼意思 $ ar0 = explode($ marqueurDebutLien,$ text); $ ar1 = explode($ marqueurFinLien,$ ar0 [1]); $ ar = trim($ ar1 [0]); return $ ar; 我很早就在php.i剛剛開始研究它。 –

3

總之,它看起來像一種解析字符串的方式 - 可以說非常低效和脆弱。

$ar0 = explode($marqueurDebutLien, $text); 

這條線將打破(「爆炸」)存儲在$文本成子的陣列的串,使用$marqueurDebutLien串作爲分隔符。然後,它需要此數組的元件(即,下文中$marqueurDebutLien)和再次打破它:使用$marqueurFinLien作爲隔板

$ar1 = explode($marqueurFinLien, $ar0[1]); 

...現在。

根據定義,此數組的第一個元素是位於$marqueurDebutLien$marqueurFinLien'marker substrings'之間的原始字符串($text)中的第一個字符串。它的修剪版本是什麼函數返回。

爲什麼效率低下,你可能會問?實際上,有幾個小東西,可以在這裏很容易改進:爲explode S限制所以只有一小部分會被處理,返回的結果trim馬上不是將其存儲在一些變量...

但在事實上,整個方法是有缺陷的。看看這個:

function notSoMysticEntre2v2($text, $openingDelimiter, $closingDelimiter) { 
    $mark1 = strpos($text, $openingDelimiter); 
    if ($mark1 === FALSE) { 
     return null; 
    } 
    $mark2 = strpos($text, $closingDelimiter, $mark1); 
    if ($mark2 === FALSE) { 
     return null; 
    } 
    $data = substr($text, $mark1 + 1, $mark2 - $mark1 - 1); 
    return trim($data); 
} 

注意到,這個功能相當多防呆比第一種:將正確地進行故障解析字符串(返回null爲錯誤的標誌),如果沒有打開定界符有或者如果沒有關閉分隔符。

+0

我知道這個答案需要很長時間才能寫出來,但在看原始代碼的時候卻忍不住寫出來。 )當然,如果這些分隔符實際上只是字符,那麼使用'strtok'會更容易(也更快)。 – raina77ow