所以我有这段代码:
else {
$strlen = json_encode(strlen($_POST['message']));
?>
<script language="javascript" type="text/javascript">
var length = <?php echo $strlen ?>
alert("Your message was too long (max 255 chars), yours was " + length);
</script>
<?php
echo "Your message was too long (max 255 chars)";
echo "Yours was " . $strlen . " charachters long";
}
...并且它不会显示带有字符串实际strlen
值的警告框。
“你的是$ strlen charchters long”工作得很好。
我也尝试删除json_encode()
,但两者都没有。
答案 0 :(得分:6)
好的,我知道这里发生了什么。这里的评论中有很多错误的信息。
首先让我们澄清一下误解:
<?php ... ?>
中的PHP单行 NOT 需要分号。 "The closing tag of a block of PHP code automatically implies a semicolon; you do not need to have a semicolon terminating the last line of a PHP block."
JavaScript会自动在行What are the rules for JavaScript's automatic semicolon insertion (ASI)?
OP的代码被破坏,因为JavaScript没有在以下行添加分号:
var length = <?php echo $strlen ?>
为什么不呢?
解析器[立即]在“?&gt;”之后删除了一个换行符(或序列)
对于php(在我看来)这有点奇怪的行为,但我已经证实它确实表现得这样。
因此,总而言之,您需要在该行和类似行上使用分号,因为在解析时,它看起来像:var length = 3 alert("Your message...
。
如果OP在他的问题中包含了生成的源代码(JS),那么这将非常明显。
另一种解决方案是在那里添加更多的空格,这样JS ASI仍然可以工作 - 但正如其他人所提到的,它通常被接受的“良好实践”在JS中添加分号,即使它们是可选的
在PHP文档中找到我的答案:http://php.net/manual/en/language.basic-syntax.instruction-separation.php及其评论。
TL; DR:在此行的末尾添加分号
var length = <?php echo $strlen ?>;
答案 1 :(得分:1)
这应该有效:
...
$strlen = strlen($_POST['message']);
?>
<script language="javascript" type="text/javascript">
var length = <?php echo $strlen; ?>;
alert("Your message was too long (max 255 chars), yours was " + length);
</script>
<?php
echo 'Your message was too long (max 255 chars)';
echo 'Yours was ' . $strlen . ' charachters long';
...
答案 2 :(得分:1)
您在这里错过了分号:var length = <?php echo $strlen ?>;
答案 3 :(得分:1)
var length = <?php echo $strlen ?>
也许将其改为
var length = <?php echo $strlen ?> ;
答案 4 :(得分:0)
json_encode
期望一个数组作为输入参数,为它提供一个int值(字符串的长度)。
你真的不需要将int值转换为json对象,$strlen = strlen($_POST['message']);
可能就足够了。
你也缺少一个分号,如:
var length = <?php echo $strlen ?>
//Should be:
var length = <?php echo $strlen; ?>
//Or even:
var length = <?php echo $strlen; ?>;
答案 5 :(得分:0)
把它放在引号中。为我工作。
var length ="<?php echo $strlen ?>";