【问题标题】:In_array doesn't see element in DateTimeZone::ALL_WITH_BC, why?In_array 在 DateTimeZone::ALL_WITH_BC 中看不到元素,为什么?
【发布时间】:2020-11-28 16:24:55
【问题描述】:

对不起我的英语(谷歌翻译有帮助)))

一般任务是检查接收到的 cookie 中是否存在时区。如果“找到”,则将其发送到变量,如果不是“未找到”,则默认变量。

我显示一个 DateTimeZone::ALL_WITH_BC 时区列表,当列表更改时,通过 in_array 创建一个带有值的 cookie,检查 DateTimeZone::ALL_WITH_BC 数组。但是带有加号 + 的值不通过检查,即 Etc/GMT+3 等。

示例代码:

<?php
echo '<select id="List">';
$tzlist = DateTimeZone::listIdentifiers(DateTimeZone::ALL_WITH_BC);
foreach($tzlist as $value)
{
echo '<option value='. $value .'>'. $value .'</option>';
}
echo '</select>';
$takeCookie = $_COOKIE['cookie'];
if (in_array($takeCookie, DateTimeZone::listIdentifiers(DateTimeZone::ALL_WITH_BC))) 
{
echo "Found";
} 
else {
echo "Not Found";
}
?>
<script>
  $("#List").change(function() {
  var tz = $(this).val();
  document.cookie = "cookie="+tz;
    });
</script>

选择时区刷新页面时,所有值都是“Found”,除了带+的,为什么?

例如,从列表中选择:

<option value="Etc/GMT+9">Etc/GMT+9</option>

Cookie 类型:

cookie=Etc/GMT+9

上面的示例代码显示“未找到”。

UPD 好吧,问题不在In_array))

问题出在这里:

<script>
    document.cookie = "cookie=Etc/GMT+9";
</script>

<?php
var_dump($_COOKIE['cookie']);
?>

结果:

string(9) "Etc/GMT 9"

加号 (+) 在哪里?

【问题讨论】:

  • 请注意,您没有正确关闭 &lt;/select&gt;。除此之外,抛出的具体错误是什么?
  • 您可能希望在 cookie 值上使用 encodeURIComponent,正如 MDN 所建议的那样。
  • @charlietfl,您对&lt;/select&gt; 的看法是正确的,但这并不能解决使用+ 号检查值的问题。
  • 再次...具体错误是什么?
  • @charlietfl,可能写错了。这与“错误”无关,它只是一条消息。 echo "Error".

标签: javascript php cookies


【解决方案1】:

感谢 @Jeto,帮助使用 encodeURIComponent。喜欢:

<script>
     document.cookie = "cookie="+encodeURIComponent('Etc/GMT+9');
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多