PHP从字符串中过滤主题标签并将结果写回文件

时间:2015-05-25 09:11:28

标签: php filter fopen fwrite word

我正在使用fopen()fwrite()将一些JSON内容写入文件。

我的问题:有没有办法过滤内容并只将特定字词写入该文件?

例如:我从JSON文件中检索"I #love #love #love you so #much my dear #brother!",我想只写一个单词 #love,只有一次写入文件?

以下是我在$message中获得的一个示例:

<p> #follow4follow #followme #follow #smile #happy #instalike #instadaily #instagood #life4like #like #likeback #fashion #fun #like4like #sweettooth #spring #gopro #love #tbt</p>

这是我的起点($message将整个短语写入文件):

$myfile = fopen("custom/hashtag.php", "a");
fwrite($myfile, "<p>" . $message . "</p>" . " \n\r");

/////////////////////////////////////////////
//updated as @insertusernamehere suggested://
/////////////////////////////////////////////

$message = $comment['message']; //i get this from my json

$whitelist = array('#love');

// get only specific hashtag
preg_match_all('/' . implode('|', $whitelist) . '/', $message, $matches);

$unique_matches = array_unique($matches[0]);

$final = implode(' ', $unique_matches); 

$myfile = fopen("custom/hashtag.php", "a");

// to avoid empty results
if (!empty($unique_matches)) { 
   fwrite($myfile, "<p class=\"hidden\">" . $final . "</p>" . " \n\r");
}

2 个答案:

答案 0 :(得分:2)

你可以这样解决:

$message = 'I #love #love #love you so #much!';

使用正则表达式获取所有主题标签

preg_match_all('/#(\\w+)/', $message, $matches);

仅获取特定主题标签

对于#love#loveYou等类似标签,这是安全的。

$whitelist = array('love', 'stackoverflow');
preg_match_all('/#\b(' . implode('|', $whitelist) . ')\b/', $message, $matches);

丢掉重复

$unique_matches = array_unique($matches[0]);

使用空格组合所有主题标签,例如

print implode(' ', $unique_matches);
// prints "#love #much"

或者,如果您希望之后按允许的标记过滤列表

// create a whitelist of hashtags
$whitelist = array('#love', '#stackoverflow');
// filter the result by this list
$unique_matches_filtered = array_intersect($whitelist, $unique_matches);
// prints only "#love"
print implode(' ', $unique_matches_filtered);

答案 1 :(得分:0)

从纯粹的PHP角度来看,使用单词之间的空格作为分隔符将explode()字符串转换为数组,使用array_unique()来解决重复的问题,然后使用可接受的单词数组来使用array_intersect()与您的数组进行比较。将结果写入您的文件。

非常丑陋的代码不适合生产,但有效:

<?php
$myallowedwordsarray = array("#love");

$stringtoclean = "I #love #love #love you so much!";

$arraytoclean = explode(" ", $stringtoclean);
$arraytocleanunique = array_unique($arraytoclean);
$cleanedarray = array_intersect($myallowedwordsarray, $arraytocleanunique);

echo $cleantext = implode($cleanedarray, " ");