使用php和javascript进行编码和解码以及数据属性验证


Encoding and decoding with php and javascript and data attributes validation


我使用数据属性将数据从html发送到javascript
数据属性来自mysql数据,因此其中可能有空间,因此
我得到了验证错误,因为它说属性内部不允许有空间

因此,我认为if的解决方案是用php对值进行编码,使其没有空格
然后在传递给javascript后用javascript对其进行解码。这个有预制函数吗?一个故障保护的方式将是真棒:)

还有没有一种方法可以将值存储在数据属性中,同时在其中留出空间并进行验证?

html属性中的

空格应该不会有问题(想想style属性:style="background-color: #F63;"有一个空格,但仍然可以工作。然而,如果数据是使用ajax发送的,那么它很可能会被url编码(@Brad:urlencode就是你的意思,我怀疑)。

由于您说数据来自SQL表,所以传递的数据本身可能存储在php中的对象或数组中。如果是这样的话,为什么不只是json_encode的数据,并在javascript:JSON.parse(document.getElementById('theId').value);中。这为您提供了一个JS中的对象,其中包含您所拥有的所有数据。如果只需要1个字符串,您可以通过将数据放在包装器数组中来使用json_encode,并对其进行编码。。。

如果将其字符串连接到html:,请确保使用SINGLE引号

<?php
    $dbArray = array('this', 'array', 'contains','your','data', 'with spaces');
    $html= '<input type="hidden" id="hiddenArray" value='''.json_encode($dbArray).'''/>';

如果使用单引号,则元素的格式将不正确,因为json编码的数组中有双引号:

<input type="hidden" id="hiddenArray" value='["this","array","contains","your","data","with spaces"]' />

可能看起来不性感,但正如你所看到的,双引号会将元素值设置为[。。。这不会剥夺空间,但也不会给你带来任何问题。

还有没有一种方法可以将值存储在数据属性中,同时在其中留出空间并进行验证?

只要确保引用属性值即可。

这是一个通过W3C验证器的有效文档。

<!DOCTYPE HTML>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Data Attributes</title>
  </head>
  <body>
    <h1 data-space="This value has a space in it">Data Attributes</h1>
  </body>
</html>

如果您在PHP中使用类似htmlentities的东西对它们进行html编码,那么您可以使用unescape 在javascript中对它们进行解码

<?php
$value = htmlentities('hey you'); //hey%20you

然后在javascript 中

var value = unescape('hey%20you'); //hey you