仅显示英文字符和简单的特殊字符

时间:2015-08-04 08:39:26

标签: php jquery mysql regex

我需要解决的问题是,如果我在描述文本区域中输入英语范围之外的字符,则表示只有1个字符用于输入1个字符,因此您可以编写2000个字符的全文区域。

head.php

脚本将所有(ā,ē,ī,ū,')字符显示为1个符号类型。但实际上,代码将这些字符理解为多个ascii字符。因此,当我尝试在submit.php中提交带有这些字符(āēīū'和其他)的完整表单时,IF语句错误“描述应该介于500到2000个字符之间!”显示出来。

所以这是因为例如这个特殊符号'在'之前插入这个字符\。所以它变成了错误的数字 我想只输入英文字符。但有一些特殊的人物。

例如'需要这个角色。但是我需要把它算作1个字符而不是2个因为安全原因这个\斜杠。

head.php

    <script>
      $(document).ready(function() {
        var text_max = 2000;
        $('#textarea_feedback').html(text_max + ' characters');

        $('#textarea').keyup(function() {
        var text_length = $('#textarea').val().length;
        var text_remaining = text_max - text_length;

        $('#textarea_feedback').html(text_remaining + ' characters');
        });
      });
    </script>

function.php

    function sanitize($data) {
      return htmlentities(strip_tags(mysql_real_escape_string($data)));
    }

display.php

    <?php

    $sql = mysql_query("SELECT * FROM `table` ");

      while($row2 = mysql_fetch_array($sql)) {

        $description = $row2['description'];

     <?php if(strlen($description) >= 1000) { echo $description = substr($description, 0, 1000). '...'; ?>
      <a href="description.php?page=<?php echo $uid;?>">Read more</a>
    <?php } else { echo $description; } ?>
      }
    ?>

submit.php

    <?php $description = sanitize($_POST['description']); 

      $sql2 = "INSERT INTO `table` (description)
        VALUES ('$description')";
    ?>

    <form action="submit.php" method="post" enctype='multipart/form-data'>
      <span id="insert">Description</span><div id="textarea_feedback"></div><br>
      <textarea maxlength="2000" id="textarea" name="description" ><?php echo stripslashes($description); ?></textarea><br>
      <input type="submit" value="Submit" id="submit" name="submit" />
   </form>

    <?php
      if (isset($_POST['submit'])) {
        $con = mysql_connect("localhost","root","");
        if (!$con){
            exit("Can not connect: " . mysql_error());
        }
        mysql_select_db("database",$con);

      if ((strlen($description) < 500) or (strlen($description) > 2000)) {
      echo "<h1 class='top'>Description should be between 500 and 2000 characters long!</h1>";
      } else
            {
      mysql_query($sql2,$con);
        }
    }

2 个答案:

答案 0 :(得分:0)

如果你使用mb_strlen http://php.net/manual/en/function.mb-strlen.php和你的编码,你将获得正确的字符串长度。

示例:

echo mb_strlen('āēīū', 'UTF8');

输出:

  

4

演示: http://sandbox.onlinephpfunctions.com/code/8c92e97df6d10b09b062c27c2d17a58a7efd23a3

你应该在转义之前使用它。

请注意,如果没有编码,它仍会将每个字节计为单个字符。

echo mb_strlen('āēīū');

输出:

  

8

答案 1 :(得分:0)

假设你在整个过程中使用utf8 - 在客户端编码,在表格中CHARACTER SET和在html中使用<meta>标记,事情就会很好。

根据MySQL,

āēīū是4个字符,但占用8个字节

请勿使用mysql_*,切换为mysqli_*PDOmysql_*已被弃用,很快就会消失。 (它有问题。)

不要将转义存储在数据库中;它们只在将字符串从一个东西移交给另一个东西时才有用(form,php,mysql,html等)。