今天咱们聊聊PHP获取textarea内容的那些事。别看这问题简单,实际上坑不少。有时候你可能觉得写个form提交,然后用PHP的$_POST就能搞定,但现实往往比理想骨感得多。
咱们来看个最基本的例子:
假设你有个HTML表单,里面有个textarea:
code
codeend
然后在process.php里,你用$_POST['content']就能拿到内容,简单?但是,问题来了,如果用户输了一个换行符,你会发现这换行符在页面上显示不出来。这时候你可能要抓狂了,心想这什么鬼?
别急,咱们来处理一下。PHP里有个函数叫nl2br,专门处理这个问题,它会把换行符转换成HTML的br标签:
code
$content = nl2br($_POST['content']);
这样,换行符就能正常显示了。但这还不是最坑的。
咱们聊聊textarea里的HTML标签。如果用户输入了HTML标签,你直接用$_POST['content']输出,可能会遇到XSS攻击。比如用户输入一个script标签,你页面上就炸了。为了防止这种情况,你要用htmlspecialchars来转义HTML标签:
$content = htmlspecialchars($_POST['content']);
这样做,既能防止XSS攻击,又能保留用户的输入格式。
但是,问题又来了。如果用户输入了特殊字符,比如单引号、双引号,你直接用htmlspecialchars转义后,这些字符在页面上显示不出来。这时候你可能又要抓狂了。
你可以在转义时,设置第二个参数为ENT_QUOTES,这样能保留单引号和双引号:
code
$content = htmlspecialchars($_POST['content'], ENT_QUOTES);
codeend
这样,用户的特殊字符就能正常显示了。但这还不是最坑的。
咱们聊聊textarea里的空格。如果用户输入了多个空格,你直接用$_POST['content']输出,会发现空格被压缩成一个了。
你可以用preg_replace函数来替换多个空格:
code
$content = preg_replace('/\s+/', ' ', $_POST['content']);
codeend
这样,多个空格就被替换成一个了。但这还不是最坑的。
咱们聊聊textarea里的emoji表情。如果用户输入了emoji表情,你直接用$_POST['content']输出,会发现emoji表情显示不出来。
你可以用mb_convert_encoding函数来转换编码:
code
$content = mb_convert_encoding($_POST['content'], 'UTF-8', 'auto');
codeend
这样,emoji表情就能正常显示了。但这还不是最坑的。
咱们聊聊textarea里的字符长度。如果用户输入的字符长度超过了textarea的maxlength限制,你直接用$_POST['content']输出,会发现多余的字符被截掉了。
你可以在客户端用JavaScript来限制字符长度,或者在服务器端用PHP来截取字符:
code
$content = substr($_POST['content'], 0, 100);
codeend
这样,多余的字符就被截掉了。但这还不是最坑的。
咱们聊聊textarea里的标签闭合。如果用户输入的标签没有闭合,你直接用$_POST['content']输出,会发现页面布局乱掉了。
你可以用tidy_repair_string函数来修复HTML代码:
code
$content = tidy_repair_string($_POST['content'], array('output-xhtml' => true));
codeend
这样,标签就自动闭合了。
好了,坑基本都给你填平了。如果你还有啥不明白的,或者遇到了新的坑,记得留言告诉我,咱们一起探讨。
总结一下:
1. 用nl2br处理换行符
2. 用htmlspecialchars转义HTML标签,防止XSS攻击
3. 用preg_replace处理多个空格
4. 用mb_convert_encoding处理emoji表情
5. 用substr截取字符长度
6. 用tidy_repair_string修复标签闭合
掌握了这些骚操作,你在处理textarea内容时,就能游刃有余了。记住,PHP的世界,坑多路滑,咱们要时刻保持警惕,随时准备填坑。