2016-12-02 5 views
1

大量のマークダウン文字列にURLが含まれていますが、URLの大部分は問題ありませんが、書式を変更するといくつかの文字が破損し、空白文字に変更されたダッシュ( " - " 。preg_replace_callback()は変数の要素を保持できますか?

私はpreg_replace_callback()を使用して、PHPでロードされたときにこれを修正しようとしています。

例:

[Site Name](http://www.siteurl.com/this-is-the-website broken url) 

これらは全て大文字列内に含まれている(通常はテキストの4-5段落を持っていること)とテキストで1-3 + URLを持っているかもしれないので、私は、反復処理する必要があります文字列をキャプチャし、空白をダッシュ​​で置き換えて削除し、正しい場所に戻します。

現在、私はマッチングが世話を持っている:

$postBody = preg_replace_callback("^(\([A-Za-z\:\/0-9\-.\s]*\))^",'urlcallback', $postBody); 

そして、私は関数を作成するために試してみた:preg_replace_callbackの

function urlcallback ($matches) { 
static $id = 0; 
$matches[$id] = preg_replace("^\s^", "-", $matches); 
return $matches[$id]; 
$id++; 
} 

私の理解では、()、それが呼び出すことでした関数が文字列内で一致するたびにその関数を返し、関数の戻り値をその場所に配置しますが、エラーが発生すると、エラーが発生します:

Notice: Array to string conversion in cleanup.php at line 139 

ライン139は私の初期の$ postBody宣言です。私はpreg_replace_callback()が同時にすべてのマッチを扱っていると仮定していますので、文字列に戻す方法はわかりません。それぞれ? $matchesとして

$matches[$id] = preg_replace("^\s", "-", $matches); 

が配列でない文字列値である:

答えて

2

問題は、この行のようです。

は、それは次のようになります。

$matches[$id] = preg_replace('/\s/', "-", $matches[0]); 

$matches[0]preg_replace_callback関数呼び出しから全体マッチした文字列を表します。

+0

行は次のとおりです。 $ matches [$ id] = preg_replace( "^ \ s ^"、 " - "、$ matches); ^をdelimeterとして使用する – AdamSC

+0

"未定義オフセット2" – AdamSC

+0

"$ matches [$ id] = preg_replace( '/ \ s /'、" - $ matches [0]); ' – anubhava

関連する問題