最初に考慮すべきことは、エンコーディングを間違えると、貼り付けられた単語が非常に乱雑になる可能性があるということです。一致するエンコーディング。
たとえば、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]);
}
そのすべての代替手段として、実際のファイルを投稿 (コピーと貼り付けを削除) し、そのサーバー側を解析することを検討してください。または、あなたのウェブサイトからデータをスクレイピングすることは可能ですか?