PHP获取TEXTAREA值并转换为逗号分隔的列表

PHP获取TEXTAREA值并转换为逗号分隔的列表,php,Php,我需要一个TEXTAREA值,我需要它在每次输入时总是以相同的格式 这是我从答案中提供的代码中测试的内容: $tags = mysql_real_escape_string(strip_tags($purifier->purify($_POST['tags']))); $tags = preg_replace('/\W/',' ', $tags); $tags = preg_replace('/\s+/', ' ', $tags); $tags = trim($tags); $tags =

我需要一个TEXTAREA值,我需要它在每次输入时总是以相同的格式

这是我从答案中提供的代码中测试的内容:

$tags = mysql_real_escape_string(strip_tags($purifier->purify($_POST['tags'])));
$tags = preg_replace('/\W/',' ', $tags);
$tags = preg_replace('/\s+/', ' ', $tags);
$tags = trim($tags);
$tags = explode(' ', $tags);
$tags = array_unique($tags);
$tags = implode(',', $tags);

$tagstoadd = mb_strtolower($tags);
它们插入的任何内容的输出都应该是

'标签,标签,标签,标签,标签,标签,标签'

例如,如果输入为“Tag,Tag,Tag”

它需要输出为“tag,tag,tag,tag,tag”


我现在为空格添加了一个额外的逗号,如果已经有逗号的话,这不是我想要的。而且也不可能有重复的。如何完成此操作?

首先删除所有逗号并转换为“空格”,然后将所有空格替换为“逗号”

你可以

  • 删除所有非单词字符

    $txt = preg_replace('/\W/',' ', $txt); //replace non-word into space
    $txt = preg_replace('/\s+/', ' ', $txt); //remove extra spaces
    $txt = trim($txt);//remove trailing and heading spaces
    
  • 将文本转换为单词数组

    $txt = explode(' ', $txt);
    
  • 消除重复

    $txt = array_unique($txt); //de-duplicated
    
  • 净化每个单词(数组\映射)

  • 带逗号的连词

    $txt = implode(', ', $txt);
    
  • 我不知道你的$purizer->purify函数是做什么的,它是应用于begin中的整个文本还是每个标签?无论如何,如果你想“净化”每个标签,你可以在PHP5中这样做:

    $your_purify_function = function($tag) use ($purifier){
                              return $purifier->purify($tag); 
                            };
    

    可以使用正则表达式将所有“空格”替换为逗号。 这是一个Perl正则表达式,但它应该类似于PHP

    's/\s+/,/g'
    

    “\s+”表示1个或多个空格字符(空格、制表符),这些字符将被逗号替换。如果用户可以输入任何内容,那么使用正则表达式来分隔各个项目将非常困难

    $txt = implode(', ', $txt);
    
    但是,如果用户只使用单词(将成为标记)、逗号和空格,请尝试以下操作:

    $string = 'blah Blah , blAh, blah, blah blah';
    $results = strtolower(preg_replace('/[\s,]+/', ',', $string));
    
    其中$results的值为:

    "blah,blah,blah,blah,blah,blah"
    
    这样就可以很容易地进一步操纵

    编辑:

    如果您想删除重复的值,正如您的评论所建议的那样,请执行以下操作(我假设$results包含字符串):


    在这里,我将结果字符串转换成一个数组,根据数组中的值以逗号分隔,删除所有非唯一值,然后将其转换回字符串。

    随着我发布的代码的更新,输入我测试了这个,使用我将发布的代码,输入是我注意到,如果我添加Roman,{Roman}它们被认为是不同的,当数组删除重复项时,它不会考虑到这一点。你知道吗,在大计划中,我想如果重复项像我上面展示的那样滑入,它们不会有什么大不了的,因为如果再次提交,它会消失。
    "blah,blah,blah,blah,blah,blah"
    
    $string = implode(',', array_unique(explode(',', $results)));