我要考虑的第一件事是,如果编码错误,粘贴的单词可能会非常混乱,所以如果您有任何问题,请确保您的 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]);
}
作为所有这些的替代方案,您可以考虑发布实际文件(删除复制和粘贴)并解析该服务器端。或者是否可以从您的网站上抓取数据?