-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
A patch provided:
) parse unicode characters;
) save/restore offset before/after ToString();
From:
Date: Tue, 13 Aug 2019 12:42:08 +0800
Subject: [PATCH] parse MBCS characters; save/restore offset before/after
ToString();
---
PHPDeserializer/PHPDeserializer.cs | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/PHPDeserializer/PHPDeserializer.cs b/PHPDeserializer/PHPDeserializer.cs
index 377d675..ca7d3ba 100644
--- a/PHPDeserializer/PHPDeserializer.cs
+++ b/PHPDeserializer/PHPDeserializer.cs
@@ -232,7 +232,7 @@ namespace SickSixtySix.PHPDeserializer
string str = null;
try
{
- str = m_string.Substring(m_offset, length);
+ str = Encoding.UTF8.GetString(m_string, m_offset, length);
m_offset += length;
}
catch (ArgumentOutOfRangeException)
@@ -308,12 +308,12 @@ namespace SickSixtySix.PHPDeserializer
/// <summary>
/// String containing serialized data
/// </summary>
- private string m_string;
+ private byte[] m_string;
/// <summary>
/// Current parsing offset
/// </summary>
- private int m_offset;
+ private int m_offset = 0;
/// <summary>
/// Character at current offset
@@ -324,7 +324,7 @@ namespace SickSixtySix.PHPDeserializer
{
try
{
- return m_string[m_offset];
+ return (char) m_string[m_offset];
}
catch (IndexOutOfRangeException)
{
@@ -340,6 +340,11 @@ namespace SickSixtySix.PHPDeserializer
/// </summary>
/// <param name="str"></param>
public PHPDeserializer(string str)
+ {
+ m_string = Encoding.UTF8.GetBytes(str);
+ }
+
+ public PHPDeserializer(byte[] str)
{
m_string = str;
}
@@ -400,8 +405,11 @@ namespace SickSixtySix.PHPDeserializer
/// <returns>PHP-like associative array representation</returns>
public override string ToString()
{
+ var offset = m_offset;
+ m_offset = 0;
var stringBuilder = new StringBuilder();
traverse(Deserialize(), stringBuilder);
+ m_offset = offset;
return stringBuilder.ToString();
}
--
2.20.1.windows.1
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels