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