如何将SVG序列化以适应Cookie。

3

我需要将svg图像序列化,以便可以存储到cookie中。

我需要在之后设置cookie,然后在返回时反序列化svg图像。

因此,我的问题归结为将svg序列化为可以存储在cookie中的内容。我该怎么做?

我知道php中有serialize()和unserialize()函数,但serialize()函数接受混合值,我不确定svg是否属于该类别。

我稍微研究了一下混合值,看起来它可以接受structarrayint等,但不能接受svg。如果我对此有误,请告诉我,因为使用serialize()和unserialize()函数会使事情变得更容易。

谢谢。


1
如果您正在使用 cookie 存储图像,那么您可能正在做一些非常错误的事情。 - ThiefMaster
实际上,使用序列化是完全可行的。您可以将SVG序列化为字符串并将该字符串存储在Cookie中。然后从Cookie中获取字符串并将其反序列化为SVG。我可以很好地完成这部分工作。我的唯一问题是何时保存图像。基本上,每当SVG更改时,我希望能够保存它。 - LemonPie
1个回答

2
好的,可缩放矢量图形只是XML,因此只是文本(通常使用UTF-8编码,尽管它应该与ASCII相同,除非您显式添加任何非ASCII字符)。然而,SVG字符串将包含在cookie中不允许的特殊字符,因此需要对这些字符进行转义(分号、逗号和空格应该被转义,如果我记得正确,您可以使用PHP中的urlencode函数)。从序列化的角度来看,这就是所需的全部。但是,可能存在的一个大问题是大小限制:cookie长度不能超过4096个字符,包括名称的长度。对于更复杂的SVG来说,这可能太少了。

你说的“转义”是什么意思?另外,分号如何用于转义? - LemonPie
1
有一些字符具有特殊含义。如果您想使用它们,就必须以某种方式“隐藏”它们,使其不会被特殊解释。基本上,您所要做的就是 $cookie_value = urlencode($svgstring);,如果我没记错的话。例如,这将用 %20(http://en.wikipedia.org/wiki/URL_encoding)替换 (空格)。稍后,当您从用户那里获取 cookie 值时,可以使用 $svgstring=urldecode($cookie_value); - Tar
我理解这一点,但我的问题是,我有一个<svg>和<svg>内部的<g>。我的问题是,每当我的SVG更改时,我想将SVG保存到cookie中。基本上,我使SVG可编辑。因此,每当有更改时,即onchange,我就可以将其保存到cookie中。但是<svg>和<g>没有onchange事件(如果我错了,请纠正我)。那么我该怎么办? - LemonPie
<svg> <g> <image x=7 y=8 id=a> <text id=b> ... <g> <svg> 下面有一些代码引用了id a和b并对其进行更改。基本上这是我现在拥有的结构。唯一的问题是我想使用onchange JavaScript属性,但这些标签没有它。 - LemonPie
你是更改它们的人,所以为什么还需要一个事件呢?你可以尝试将它们封装在一个带有方法的对象中。这样,每当你操作对象时,就可以调用函数。不过,我怀疑你想要做的事情可能有比你目前尝试的方法更好得多的解决方案。 - Tar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接