我非常是PHP的新手,需要一些关于我正在开展的项目的良好起点的建议。
我有一个网站和一个时事通讯,两者都是由新闻文章摘要组成的(该网站类似于旧版本的Digg,但没有用户提交)。 word文档的格式为:
分类
文章标题
新闻文章摘要
网站链接文章可在
找到一旦word文档填充了所有文章摘要,我希望能够复制文档中的所有文本,将其粘贴到html表单中的单个textarea字段中,并以某种方式选择PHP单独的故事摘要并将它们存储在数据库中,以便以后可以将它们放到网站上。
我能想到的唯一方法是在word文档中添加描述性标记,例如:
<begin_category>Category<end_category>
<begin_title>Article Title<end_title>
依此类推,然后让php识别这些标签(preg_match?)并从中提取信息。那么我的问题是,编程的最佳方法是什么?我应该研究哪些概念?如何告诉PHP查找这些标记并将它们之间的所有内容拉出来?这是一个可怕的方式来解决这个问题吗?我最好只拥有一个表格,其中包含所有项目(类别,标题,摘要,链接)的不同字段,并逐一提交每个摘要?
我希望能够发布整个文档并填充它的唯一原因是为了节省时间。无论简报如何,都必须写出word文档。
任何方向都会受到赞赏;我应该谷歌搜索的东西,我应该阅读的文章等等。
答案 0 :(得分:0)
我要考虑的第一件事是,如果你的编码错误,粘贴的字可能会非常混乱,所以如果你有任何问题,请确保你的html表单和php文件(可能是同一个)和数据库存储具有匹配的编码。
例如,在utf8中保存php源代码,确保为数据存储使用适当的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]);
}
作为所有这些的替代,您可以考虑发布实际文件(删除复制和粘贴)并解析该服务器端。或者是否可以从您的网站上删除数据?