Module: PHP

Defined in:
lib/php_serialize_encoded.rb

Class Method Summary collapse

Class Method Details

.encode_in_deep(val, encoding) ⇒ Object

Когда битрикс работает с базой в cp1251, а рельсы с UTF-8 Возникают проблемы с подсчетом длинны строк при сериализации ‘тест’ в cp1251 имеет 4 символа, а в utf-8 - 8.

Поэтому приходится производить все сериализацию через эти врапперы.



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/php_serialize_encoded.rb', line 10

def PHP.encode_in_deep(val, encoding)
  if val.is_a? Array
    val = val.map { |v| encode_in_deep(v, encoding) }
  elsif val.is_a? Hash
    val.each_pair do |k,v|
      val[k] = encode_in_deep(v, encoding)
    end
  elsif val.is_a? String
    val = val.encode(encoding)
  end
  val
end

.serialize_encoded(val) ⇒ Object



23
24
25
26
# File 'lib/php_serialize_encoded.rb', line 23

def PHP.serialize_encoded(val)
  val = encode_in_deep(val, 'CP1251')
  serialize(val).encode('UTF-8')
end

.unserialize_encoded(s) ⇒ Object



28
29
30
31
32
# File 'lib/php_serialize_encoded.rb', line 28

def PHP.unserialize_encoded(s)
  val = unserialize(s.encode('CP1251'))
  val = encode_in_deep(val, 'UTF-8')
  val
end