1

ユーザーがレッスンでForvoのボイスクリップを投稿できるようにするインテリジェントな方法が必要です。Forvoでは、$ this-> Forvo-> word('hola'、'es')を使用してヘルパーを使用する必要があります。

ユーザーが[forvo=hola、es]のようなbb-codeを使用できるようにするというアイデアがありますが、これを実装するにはどうすればよいでしょうか。私が思いつくことができる唯一のことは、多くのsubstr、strpos ...を使用することです。これには、少なくとも35行のコードが必要であり、これはきれいで安全ではありません。

<?php
// Replace forvos in the lesson
$lesson = $lesson['Lesson']['body'];

// Todo: 
// Replace [forvo=hello,en] by javascript from
// $this->Forvo->word('hello', 'en');

// I seem unable to use regex's like this
$pattern[0] = "/\[forvo\=(.*),(.*)]";
$replace[0] = $this->Forvo->word($1, $2);
echo preg_replace($pattern, $replace, $lesson);

?>

レッスンの例は次のとおりです。

Pronounciations in Dutch
    een [forvo=een,nl]
    en [forvo=en,nl]
    de [forvo=de,nl]
    in [forvo=in,nl]
    met [forvo=met,nl]
4

1 に答える 1

0

ありがとう、ウェイグッド。preg_replace_callback で動作します。

<?php
// Replace forvos in the lesson
$lesson = $lesson['Lesson']['body'];

function forvize($match) {
    $word = $match[1];
    $language = $match[2];
    $link = "http://apifree.forvo.com/action/word-pronunciations/format/js-tag  /word/".$word."/language/".$language."/order/rate-desc/limit/1/key/123456789/";
    $link = file_get_contents($link);
    return $link;
}

//URL's
$lesson = preg_replace_callback("/\[forvo\=(.*),(.*)\]/", 'forvize', $lesson);
?>
于 2012-08-16T14:40:37.947 に答える