在 HTML 文本区域字段中强制执行最大字节数

问题描述 投票:0回答:3

我试图将文本区域中输入的 unicode 字符数限制为 500。
当我尝试发布表单并获取文本区域内容以在后端检查其长度时,我得到了双倍长度,这意味着我从 strlen 获得的值是输入字符数的两倍。

这里有什么问题?

<textarea id="ArticleSummary" name="ArticleSummary" rows="4" maxlength="500">
 <?php echo $Summary; ?></textarea>
  $Summary = trim( $_POST['ArticleSummary'] );
  echo strlen($Summary);
php html textarea
3个回答
1
投票

unicode 字符每个占用 2 个字节,strlen 返回字符串中的字节数,您可以将其转换为 unicode 字符并检查长度。


0
投票

我知道这是一个老问题,但它是谷歌的最高结果。有关换行符,请参阅此答案 在 html/JavaScript 中和 PHP 语言。

另请注意,您要使用

mb_strlen
,因为某些字符(例如表情符号)在 PHP 中将被视为多个字符。

解决方案如下:

// <textarea maxlength="2500">🎌🎌🎌...</textarea>

echo strlen( $text ); // 5132 (incorrect)
echo mb_strlen( $text ); // 2566 (incorrect)

$text = preg_replace( "/\r\n|\r/", "\n", $text );

echo mb_strlen($order_notes); // 2500 (correct)

0
投票

我不知道您从哪里获取变量 $Summary;但如果它比您所需的 500 个符号长,它将按原样发送。示例代码如下:

<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<?php empty($_POST['ArticleSummary']) or var_dump(mb_strlen($_POST['ArticleSummary']));?>
<form method="POST" action="">
<?php $text = '123456789'; ?>

<textarea id="ArticleSummary" name="ArticleSummary" rows="4" maxlength="5"><?php echo $text;?></textarea>

<input value="submit" type="submit" />

</form>

</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.