如何限制PHP中的文本字符?

时间:2010-04-17 16:06:29

标签: php mysql

我想知道如何限制用户输入,例如HTML maxlength属性,但是使用PHP,示例会很好吗? MySQL varchar(255)是限制用户字符输入的一种方法吗?只依靠MySQL来做这件事的缺点是什么?

4 个答案:

答案 0 :(得分:6)

你看过strlen了吗?

$input = $_GET['input'];
if ( strlen($input) > 255 ){
    throw new Exception('Cannot have input exceeding 255 characters');
}

计算MySQL以截断字符串长度的主要问题是缺少错误处理。如果用户输入被截断到一个长度,他们可能不打算这样做,并且(可能)更好地显示错误页面。

答案 1 :(得分:2)

substr($string, $start, $length)

这会缩短你的字符串。

$ start应该从0开始,从第一个字符开始

$ length是你想要字符串的时间长度。

答案 2 :(得分:1)

在没有通知的情况下被动缩短输入是不好的。抛出错误更好。但在我看来,最好的解决方案是让用户不要在第一时间输入太多内容。对于字段来说这很容易:

<input maxlength="255" />

大多数浏览器会阻止用户输入更多内容。 <textarea>更难以限制,但可以通过一些简单的javascript来完成。 Twitter这样做。请考虑以下示例,该示例在textarea上方显示字符数:

<html>

<script type="text/javascript">
  function numberOfCharacters(textbox,limit,indicator) {
    chars = document.getElementById(textbox).value.length;
    document.getElementById(indicator).innerHTML = limit-chars;
  }
</script>

<body>
  <label for="mytextbox">
    Message (140 char. max.)
    <span id="characterlimit">140</span>
  </label>
  <br/>
  <textarea id="mytextbox" rows="2" cols="40" onkeyup="numberOfCharacters('mytextbox',140,'characterlimit');"></textarea>
</body>

</html>

此粗略示例不强制执行字符限制,但它确实通知用户该限制。将此与Yacoby的strlen()示例结合使用,如果用户忽略警告并且无论如何都超出限制,则抛出错误。那时你已经尽力防止过度打字,用户只能责怪自己。

如果你要施加一个字符限制,在他打字小说之前通知用户并为他继续计算是很常见的。

答案 3 :(得分:1)

strlen()是整个PHP中最慢的函数之一。最佳解决方案是:

<?php
$text = "some text";
if (isset($text[255])) {
    echo 'Text is too long. It should be no longer than 255 characters';
}
?>