1

我对 PHP非常陌生,需要一些关于我正在从事的项目的良好起点的建议。

我有一个网站和一个时事通讯,两者都由新闻文章摘要组成(该网站类似于旧版本的 Digg,但没有用户提交)。Word 文档的格式为:

类别

文章标题

新闻文章摘要

网站文章的链接可在以下位置找到

一旦 word 文档填充了所有文章摘要,我希望能够从文档中复制所有文本,将其粘贴到 html 表单中的单个 textarea 字段中,并让 PHP 以某种方式挑选出单独的故事摘要并将它们存储在数据库中,以便以后可以将它们拉到网站上。

我能想到的唯一方法是在 word 文档中添加描述性标签,例如:

<begin_category>Category<end_category>

<begin_title>Article Title<end_title>

依此类推,然后让 php 识别这些标签(preg_match?)并从中提取信息。那么我的问题是,进行编程的最佳方法是什么?有什么我应该研究的概念吗?我如何告诉 PHP 寻找这些标签并将所有内容都放在它们之间?这是一个可怕的方法吗?我是否最好只使用一个包含所有项目(类别、标题、摘要、链接)的不同字段的表单并逐个提交每个摘要?

我希望能够发布整个文档并填充它的唯一原因是节省时间。无论通讯如何,都必须编写word文档。

任何方向将不胜感激;我应该在谷歌上搜索的东西,我应该阅读的文章等。

4

1 回答 1

0

我要考虑的第一件事是,如果编码错误,粘贴的单词可能会非常混乱,所以如果您有任何问题,请确保您的 html 表单和 php 文件(可能相同)以及数据库存储有一个匹配编码。

例如,将 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 回答