1

私はPHPに非常に慣れていないので、現在取り組んでいるプロジェクトの適切な出発点についていくつかの提案が必要です。

私は Web サイトとニュースレターを持っており、どちらもニュース記事の要約で構成されています (Web サイトは古いバージョンの Digg に似ていますが、ユーザーによる投稿はありません)。Word 文書は、次の形式で起草されます。

カテゴリー

記事のタイトル

ニュース記事まとめ

ウェブサイトの記事へのリンクは次の場所にあります

Word ドキュメントにすべての記事の要約が入力されたら、ドキュメントからすべてのテキストをコピーし、HTML フォームの単一のテキストエリア フィールドに貼り付けて、PHP に別の記事を何らかの形で選択させたいと考えています。要約をデータベースに保存して、後で Web サイトにプルできるようにします。

これを行うと考えることができる唯一の方法は、次のような説明的なタグを単語文書に追加することです。

<begin_category>Category<end_category>

<begin_title>Article Title<end_title>

などで、php にこれらのタグ (preg_match?) を認識させ、そこから情報を引き出します。私の質問は、これをプログラミングするための最良の方法は何ですか? 研究すべき概念はありますか? これらのタグを探して、それらの間のすべてを取得するように PHP に指示するにはどうすればよいですか? これはひどい方法ですか?すべての項目 (カテゴリ、タイトル、概要、リンク) に対して異なるフィールドを持つフォームを作成し、各概要を 1 つずつ送信する方がよいでしょうか?

ドキュメント全体を投稿して入力できるようにしたい唯一の理由は、時間を節約することです。ニュースレターに関係なく、単語文書を作成する必要があります。

どんな方向性でも大歓迎です。グーグルで調べるべきこと、読むべき記事など。

4

1 に答える 1

0

最初に考慮すべきことは、エンコーディングを間違えると、貼り付けられた単語が非常に乱雑になる可能性があるということです。一致するエンコーディング。

たとえば、php ソースを utf8 で保存し、データ ストレージに適切な Unicode スキームを使用して、HTML に次のヘッダーを含めるようにしてください。

<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>

常に入力を制御している場合、これはそのような問題ではありません。多くの場合、メモ帳に貼り付けて、メモ帳からフォームに貼り付けることで、単語の混乱を解消できます。メモ帳を使用する方が良いので、プレーンな asci txt を使用しています。しかし、エンコーディングが全体的に一致していれば、問題ありません。

提案したようにタグを使用し、次のような方法でコンテンツを解析できます。

 /**
* parses $string for blocks of content appearing between $starttag and $endtag
* Will parse all matching blocks and return as array.
* 
* @return Array The blocks of content parsed from $string
* 
* @param string $string   This is the content to be parsed, for example this could be the HTML from the buffer
* @param string $starttag This is the start tag, the beginning of a returnable content block i.e <!--customtag  or <img
* @param string $endtag The end of block of content.
*/
function ParseBlocks($string, $starttag, $endtag)
{
    $pattern = "/".preg_quote($starttag).'(.*?)'.preg_quote($endtag)."/"; 
    if(preg_match_all($pattern, $string, $matches, PREG_PATTERN_ORDER) === false)
        $this->WriteError(preg_last_error());
    return $matches[1];
} 

このような関数は次のように使用できますが、入力が偶数であり、各エントリに必要なすべてのセクションがあると想定されます。これは、出力として同じ長さの 4 つの配列が期待されるためです。

$categories = ParseBlocks($postedContent,"<!category>","</category");
$titles = ParseBlocks($postedContent,"<!title>","</title");
$summaries = ParseBlocks($postedContent,"<!summary>","</summary");
$links = ParseBlocks($postedContent,"<!link>","</link");

その後、コンテンツにアクセスしてデータベースにプッシュできます。

$itemCount = count($categories);
for($i =0; $i < $itemCount; $i++)
{//some db insert function -  this is made up, but should give the idea.
  db_execute('insert into t_table values (?,?,?,?)'
      ,array($categories[$i], $titles[$i], $summaries[$i], $links[$i]);
}

そのすべての代替手段として、実際のファイルを投稿 (コピーと貼り付けを削除) し、そのサーバー側を解析することを検討してください。または、あなたのウェブサイトからデータをスクレイピングすることは可能ですか?

于 2012-09-19T22:14:43.727 に答える