Php从html文本区域拆分文本

时间:2014-06-06 15:21:34

标签: php html regex split type-conversion

我正在尝试拆分从HTML textarea传递的字符串。

Enter the list of Ids: <textarea rows="4" cols="50" name="ids">

我在PHP脚本中得到它

$idlist=$_GET["ids"];

当我尝试拆分时,我无法爆炸。尝试使用多个分隔符可能会拆分它然后尝试使用preg_split。我把它作为我的正则表达式。

$ids=preg_split("/\s/",$idlist);

现在我拆分了,我在$ ids中获得了空数组元素。我无法像

那样匹配它们
$ids[$i]==""|" "|"\s"

1)文本区域中的文本将如何通过?我在文本区域中每行给出一个Id。它不会携带新的行字符,而是一个空格。

2)preg_split会拆分出用来拆分字符串的分隔符吗?

我知道我犯了一个大错,但无法弄清楚在哪里。有人想过吗?

4 个答案:

答案 0 :(得分:1)

如果每个ID都在新行上,则需要按新行字符\n进行爆炸...

$ids=preg_split("/\r|\n)*/", $idlist);

编辑:更新以支持Windows编码,因为它是作为GET发送而不是POST ..

说明:

Windows将新行发送为\ r \ n,因此如果是GET,则需要为此提供支持...

答案 1 :(得分:1)

在这里你 - 只需使用explode将它们分解为基于&#34; \ n&#34;的数组。换行符。我知道你提到这不起作用,但测试了它,它适用于我:

<?php
if (isset($_GET['ids'])) {
    $arrayOfIds = explode("\n", $_GET['ids']);
}

?>

<form method="get" action="">
    <textarea name="ids"></textarea>
    <button type="submit">Submit</button>
</form>

如上所述,在textarea字段中键入ID时,我只是将它们分别放在一个新行上。

答案 2 :(得分:0)

想出来。字符串中只有一个空格和一个新行字符。使用\n对其进行分解,然后使用解决问题的trim()进行修剪。

答案 3 :(得分:0)

对于textarea,当您要求用户提供数据时,您必须假定用户是愚蠢的。如果你说“在每一行提供一个id”假设他们不会读它并使用逗号或假设他们最后按ENTER键50次,或者假设他们从MS Word粘贴它。对用户没有冒犯,但只是假设它们是键盘上的果冻鱼,并且在某些时候它设法点击“提交”。

考虑到这一点,(我假设你的ids是数字),这意味着任何不是数字的东西都可以被忽略。只要每个id之间存在某种特性,那么这就会让人担心新的线条,无论是\ n \ r或其他什么,完全无关紧要。那就是我们所需要的。

我要将$ _GET [“ids”]更改为$ _POST [“ids”],因为我会发布那种数据。

// This will create a list of ids with NO care about what delimeter
// the user used regardless of what you'd requested.

// Replace all non-numeric characters with #
$ids = preg_replace("/[^0-9]/is","#",$_GET["POST"]);

// Remove recursive # and trim
$ids = preg_replace("/#{1,}/is","#",trim($ids,"#"));

// Create array ensuring ids isn't empty
// This also removes unique id entries
$ids = empty($ids)?array():array_unique(explode("#",$ids));

// Show array
echo "<pre>";
print_r($ids);
echo "</pre>";