PageRenderTime 24ms CodeModel.GetById 18ms RepoModel.GetById 6ms app.codeStats 0ms

/libraries/idna_convert/transcode_wrapper.php

https://bitbucket.org/biojazzard/joomla-eboracast
PHP | 137 lines | 93 code | 5 blank | 39 comment | 35 complexity | 2e6a7a149869627ab1d2c369c441dee3 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0, MIT, BSD-3-Clause
  1. <?php
  2. /**
  3. * transcode wrapper functions
  4. * @package IDNA Convert
  5. * @subpackage charset transcoding
  6. * @author Matthias Sommerfeld, <mso@phlylabs.de>
  7. * @version 0.1.0
  8. */
  9. /**
  10. * Convert a string from any of various encodings to UTF-8
  11. *
  12. * @param string String to encode
  13. *[@param string Encoding; Default: ISO-8859-1]
  14. *[@param bool Safe Mode: if set to TRUE, the original string is retunred on errors]
  15. * @return string The encoded string or false on failure
  16. * @since 0.0.1
  17. */
  18. function encode_utf8($string = '', $encoding = 'iso-8859-1', $safe_mode = false)
  19. {
  20. $safe = ($safe_mode) ? $string : false;
  21. if (strtoupper($encoding) == 'UTF-8' || strtoupper($encoding) == 'UTF8') {
  22. return $string;
  23. } elseif (strtoupper($encoding) == 'ISO-8859-1') {
  24. return utf8_encode($string);
  25. } elseif (strtoupper($encoding) == 'WINDOWS-1252') {
  26. return utf8_encode(map_w1252_iso8859_1($string));
  27. } elseif (strtoupper($encoding) == 'UNICODE-1-1-UTF-7') {
  28. $encoding = 'utf-7';
  29. }
  30. if (function_exists('mb_convert_encoding')) {
  31. $conv = @mb_convert_encoding($string, 'UTF-8', strtoupper($encoding));
  32. if ($conv) return $conv;
  33. }
  34. if (function_exists('iconv')) {
  35. $conv = @iconv(strtoupper($encoding), 'UTF-8', $string);
  36. if ($conv) return $conv;
  37. }
  38. if (function_exists('libiconv')) {
  39. $conv = @libiconv(strtoupper($encoding), 'UTF-8', $string);
  40. if ($conv) return $conv;
  41. }
  42. return $safe;
  43. }
  44. /**
  45. * Convert a string from UTF-8 to any of various encodings
  46. *
  47. * @param string String to decode
  48. *[@param string Encoding; Default: ISO-8859-1]
  49. *[@param bool Safe Mode: if set to TRUE, the original string is retunred on errors]
  50. * @return string The decoded string or false on failure
  51. * @since 0.0.1
  52. */
  53. function decode_utf8($string = '', $encoding = 'iso-8859-1', $safe_mode = false)
  54. {
  55. $safe = ($safe_mode) ? $string : false;
  56. if (!$encoding) $encoding = 'ISO-8859-1';
  57. if (strtoupper($encoding) == 'UTF-8' || strtoupper($encoding) == 'UTF8') {
  58. return $string;
  59. } elseif (strtoupper($encoding) == 'ISO-8859-1') {
  60. return utf8_decode($string);
  61. } elseif (strtoupper($encoding) == 'WINDOWS-1252') {
  62. return map_iso8859_1_w1252(utf8_decode($string));
  63. } elseif (strtoupper($encoding) == 'UNICODE-1-1-UTF-7') {
  64. $encoding = 'utf-7';
  65. }
  66. if (function_exists('mb_convert_encoding')) {
  67. $conv = @mb_convert_encoding($string, strtoupper($encoding), 'UTF-8');
  68. if ($conv) return $conv;
  69. }
  70. if (function_exists('iconv')) {
  71. $conv = @iconv('UTF-8', strtoupper($encoding), $string);
  72. if ($conv) return $conv;
  73. }
  74. if (function_exists('libiconv')) {
  75. $conv = @libiconv('UTF-8', strtoupper($encoding), $string);
  76. if ($conv) return $conv;
  77. }
  78. return $safe;
  79. }
  80. /**
  81. * Special treatment for our guys in Redmond
  82. * Windows-1252 is basically ISO-8859-1 -- with some exceptions, which get accounted for here
  83. * @param string Your input in Win1252
  84. * @param string The resulting ISO-8859-1 string
  85. * @since 3.0.8
  86. */
  87. function map_w1252_iso8859_1($string = '')
  88. {
  89. if ($string == '') return '';
  90. $return = '';
  91. for ($i = 0; $i < strlen($string); ++$i) {
  92. $c = ord($string{$i});
  93. switch ($c) {
  94. case 129: $return .= chr(252); break;
  95. case 132: $return .= chr(228); break;
  96. case 142: $return .= chr(196); break;
  97. case 148: $return .= chr(246); break;
  98. case 153: $return .= chr(214); break;
  99. case 154: $return .= chr(220); break;
  100. case 225: $return .= chr(223); break;
  101. default: $return .= chr($c); break;
  102. }
  103. }
  104. return $return;
  105. }
  106. /**
  107. * Special treatment for our guys in Redmond
  108. * Windows-1252 is basically ISO-8859-1 -- with some exceptions, which get accounted for here
  109. * @param string Your input in ISO-8859-1
  110. * @param string The resulting Win1252 string
  111. * @since 3.0.8
  112. */
  113. function map_iso8859_1_w1252($string = '')
  114. {
  115. if ($string == '') return '';
  116. $return = '';
  117. for ($i = 0; $i < strlen($string); ++$i) {
  118. $c = ord($string{$i});
  119. switch ($c) {
  120. case 196: $return .= chr(142); break;
  121. case 214: $return .= chr(153); break;
  122. case 220: $return .= chr(154); break;
  123. case 223: $return .= chr(225); break;
  124. case 228: $return .= chr(132); break;
  125. case 246: $return .= chr(148); break;
  126. case 252: $return .= chr(129); break;
  127. default: $return .= chr($c); break;
  128. }
  129. }
  130. return $return;
  131. }
  132. ?>