我需要解决的问题是,如果我在描述文本区域中输入英语范围之外的字符,则表示只有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);
}
}
答案 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>
标记,事情就会很好。
āēīū是4个字符,但占用8个字节。
请勿使用mysql_*
,切换为mysqli_*
或PDO
。 mysql_*
已被弃用,很快就会消失。 (它有问题。)
不要将转义存储在数据库中;它们只在将字符串从一个东西移交给另一个东西时才有用(form,php,mysql,html等)。