Outil de recodage de données PHP sérialisées.
authorProgfou <jean-christophe.andre@auf.org>
Wed, 1 Feb 2012 08:48:21 +0000 (15:48 +0700)
committerProgfou <jean-christophe.andre@auf.org>
Wed, 1 Feb 2012 08:48:21 +0000 (15:48 +0700)
unicode/php-serialized-recode.py [new file with mode: 0755]

diff --git a/unicode/php-serialized-recode.py b/unicode/php-serialized-recode.py
new file mode 100755 (executable)
index 0000000..49e75ea
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+# Outil de recodage de données PHP sérialisées (latin1→utf8)
+# (utilisé pour recoder les fichiers .dat de gallery)
+# Statut : experimental
+import sys, re
+
+PATTERN = r's:([0-9]+):"([^"]+)"'
+
+def serialized_recode(from_charset, to_charset):
+    def serialized_sub(m):
+        n, s = m.groups()
+        if int(n) != len(s):
+            print "Error: int(%s) != len(%s)" % (n, s)
+        else:
+            s = s.decode(from_charset).encode(to_charset)
+            n = len(s)
+        return 's:%s:"%s"' % (n, s)
+    return serialized_sub
+
+standard_sub = serialized_recode('latin1', 'utf8')
+
+if len(sys.argv) < 2:
+    s = sys.stdin.read()
+    s = re.sub(PATTERN, standard_sub, s)
+    sys.stdout.write(s)
+else:
+    for a in sys.argv[1:]:
+        f = file(a, 'r+')
+        s = f.read()
+        s = re.sub(PATTERN, standard_sub, s)
+        f.seek(0)
+        f.write(s)
+        f.truncate()
+        f.close()