PHP获取TEXTAREA值并转换为逗号分隔的列表
我需要一个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 =
$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);
$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)));