我使用数据属性将数据从html发送到javascript
数据属性来自mysql数据,因此其中可能有空间,因此
我得到了验证错误,因为它说属性内部不允许有空间
因此,我认为if的解决方案是用php对值进行编码,使其没有空格
然后在传递给javascript后用javascript对其进行解码。这个有预制函数吗?一个故障保护的方式将是真棒:)
还有没有一种方法可以将值存储在数据属性中,同时在其中留出空间并进行验证?
空格应该不会有问题(想想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