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

Php 仅显示英文字符和简单特殊字符,php,jquery,mysql,regex,Php,Jquery,Mysql,Regex,我需要解决的问题是,如果我在description textarea中输入英语范围以外的字符,它将显示只有1个字符用于输入的1个字符,所以您可以编写2000个字符的全文区域 head.php 脚本将所有(ā,ē,ī,ū,')字符显示为1个符号类型。但实际上,代码将这些字符理解为许多ascii字符。因此,当我尝试在submit.php中提交包含这些字符(āēīū’和其他字符)的完整表单时,如果出现语句错误“Description应该在500到2000个字符之间!” 所以这是因为,例如,这个特殊符号

我需要解决的问题是,如果我在description textarea中输入英语范围以外的字符,它将显示只有1个字符用于输入的1个字符,所以您可以编写2000个字符的全文区域

head.php

脚本将所有(ā,ē,ī,ū,')字符显示为1个符号类型。但实际上,代码将这些字符理解为许多ascii字符。因此,当我尝试在submit.php中提交包含这些字符(āēīū’和其他字符)的完整表单时,如果出现语句错误“Description应该在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>
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);
        }
    }
如果使用mb_strlen编码,您将获得正确长度的字符串

例如:

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

四,

演示:

你应该在逃跑前使用这个

注意:没有编码,它仍然将每个字节作为单个字符计数

echo mb_strlen('āēīū');
输出:

八,


假设您在整个过程中都使用utf8——在客户机中编码,在表中使用
字符集,在html中使用
标记,一切都会很好

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

不要使用
mysql\u*
,切换到
mysqli\u*
PDO
mysql.*
已被弃用,很快就会消失。(它也有问题。)


不要将转义存储在数据库中;它们只有在将字符串从一个对象传递到另一个对象(表单、php、mysql、html等)时才有用。

如果您的目的是计算字符串中的字符,那么如何?首先匹配所有Unicode字母,删除它们,然后计算其余的字母,然后求和它们的值?
echo mb_strlen('āēīū');