Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 字符来分隔值_String_Serialization - Fatal编程技术网

String 字符来分隔值

String 字符来分隔值,string,serialization,String,Serialization,我需要创建一个字符串来存储成对的键/值数据,例如: key1::value1||key2::value2||key3::value3 { "a:b:c": "foo||bar", "asdf": "\\|||x||||:" } serialize => "a\:b\:c:foo\|\|bar||asdf:\\\\\|\|\|x\|\|\|\|\:" 在对其进行反序列化时,如果键或值恰好包含|或: 处理这种情况的常用技巧是什么?谢谢处理此问题的常用方法称为转义字符或限定符。考虑这个逗号分

我需要创建一个字符串来存储成对的键/值数据,例如:

key1::value1||key2::value2||key3::value3
{ "a:b:c": "foo||bar", "asdf": "\\|||x||||:" }
serialize => "a\:b\:c:foo\|\|bar||asdf:\\\\\|\|\|x\|\|\|\|\:"
在对其进行反序列化时,如果键或值恰好包含
|


处理这种情况的常用技巧是什么?谢谢

处理此问题的常用方法称为转义字符或限定符。考虑这个逗号分隔线:

Name,City,State
John Doe, Jr.,Anytown,CA
因为name字段包含逗号,所以它当然会被不正确地拆分,以此类推

如果用限定符括住每个数据值,则解析器知道何时忽略分隔符,如本例所示:

Name,City,State
"John Doe, Jr.",Anytown,CA
限定符可以是可选的,仅用于需要它的数据字段。许多实现将在每个字段上使用限定符,不管是否需要


您可能希望为数据编码实现类似的功能。

处理此问题的常用方法称为转义字符或限定符。考虑这个逗号分隔线:

Name,City,State
John Doe, Jr.,Anytown,CA
因为name字段包含逗号,所以它当然会被不正确地拆分,以此类推

如果用限定符括住每个数据值,则解析器知道何时忽略分隔符,如本例所示:

Name,City,State
"John Doe, Jr.",Anytown,CA
限定符可以是可选的,仅用于需要它的数据字段。许多实现将在每个字段上使用限定符,不管是否需要


您可能希望为数据编码实现类似的功能。

常用的技术是转义保留字符,例如:

key1::value1||key2::value2||key3::value3
{ "a:b:c": "foo||bar", "asdf": "\\|||x||||:" }
serialize => "a\:b\:c:foo\|\|bar||asdf:\\\\\|\|\|x\|\|\|\|\:"
  • 在URL中,可以转义一些字符 使用%HEX表示法:

  • 在编程语言中,您可以逃避 某些带有斜杠前缀的字符: “\“你好”


    • 常见的技术是转义保留字符,例如:

      key1::value1||key2::value2||key3::value3
      
      { "a:b:c": "foo||bar", "asdf": "\\|||x||||:" }
      serialize => "a\:b\:c:foo\|\|bar||asdf:\\\\\|\|\|x\|\|\|\|\:"
      
      • 在URL中,可以转义一些字符 使用%HEX表示法:

      • 在编程语言中,您可以逃避 某些带有斜杠前缀的字符: “\“你好”


      一个简单的解决方案是在数据中出现分隔符时,将其转义(例如,使用反斜杠):

      Name,City,State John Doe\, Jr.,Anytown,CA 姓名、城市、州 小约翰·多伊,加利福尼亚州安尼镇
      当然,当分隔符出现在数据中时也需要转义;在这种情况下,反斜杠将变为
      \\

      一个简单的解决方案是在数据中出现任何分隔符时(例如,使用反斜杠)将其转义:

      Name,City,State John Doe\, Jr.,Anytown,CA 姓名、城市、州 小约翰·多伊,加利福尼亚州安尼镇 当然,当分隔符出现在数据中时也需要转义;在这种情况下,反斜杠将变为
      \

      使用前缀(如“a”)作为键中的特殊字符(如“b”)和值来存储它们。这称为转义

      然后通过简单地将任何“ab”序列替换为“b”来解码键和值请记住前缀也是一个特殊字符。例如:

      前缀:
      \

      特殊字符:
      \

      编码:

      title:Slashdot\:书呆子新闻。重要的东西。|短标题:\\.

      解码:

      title
      =
      Slashdot:书呆子新闻。重要的东西。

      shortTitle
      =
      \.

      使用前缀(如“a”)作为键中的特殊字符(如“b”)和值来存储它们。这称为转义

      然后通过简单地将任何“ab”序列替换为“b”来解码键和值请记住前缀也是一个特殊字符。例如:

      前缀:
      \

      特殊字符:
      \

      编码:

      title:Slashdot\:书呆子新闻。重要的东西。|短标题:\\.

      解码:

      title
      =
      Slashdot:书呆子新闻。重要的东西。


      shortTitle
      =
      \.
      序列化时转义
      |
      ,反序列化时取消转义。一种常见的类似C的转义方法是预先加上
      \
      。例如:

      key1::value1||key2::value2||key3::value3
      
      { "a:b:c": "foo||bar", "asdf": "\\|||x||||:" }
      serialize => "a\:b\:c:foo\|\|bar||asdf:\\\\\|\|\|x\|\|\|\|\:"
      

      请注意,
      \
      需要转义(由于被放在C样式的字符串中,所以需要双转义)。序列化时转义
      |
      ,反序列化时取消转义。一种常见的类似C的转义方法是预先加上
      \
      。例如:

      key1::value1||key2::value2||key3::value3
      
      { "a:b:c": "foo||bar", "asdf": "\\|||x||||:" }
      serialize => "a\:b\:c:foo\|\|bar||asdf:\\\\\|\|\|x\|\|\|\|\:"
      

      请注意,
      \
      需要转义(并且由于被放在C样式字符串中而需要双转义)。

      如果我们假设您完全控制输入字符串,那么处理此问题的常用方法是使用转义字符

      通常,反斜杠-\字符用作转义,表示“下一个字符是特殊字符”,因此在这种情况下,不应将其用作分隔符。因此,解析器会将
      \\\\\\\\\\\\
      视为分隔符,但会将
      \\\\\\\\\
      视为键或值中的两个管道字符

      下一个问题是我们重载了反斜杠。问题是,“如何表示反斜杠”。这可以通过说反斜杠也被转义来解决,因此要表示
      \
      ,必须说
      \
      。因此解析器将
      \\
      视为
      \

      请注意,如果使用转义字符,则可以使用单个字符作为分隔符,这可能会使事情变得更简单


      或者,您可能必须重新输入,并说字符串编码时,
      |
      只是被禁用和失败/删除。

      如果我们假设您完全控制输入字符串,那么处理此问题的常用方法是使用转义字符

      通常,反斜杠-\字符用作转义,表示“下一个字符是特殊字符”,因此在这种情况下,不应将其用作分隔符。因此,解析器将
      \\\\\\\
      视为分隔符,但将
      \\\\\\\\/code>视为