IndexCalculationHelper.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace ACES\Common\Salsa20;
  3. class IndexCalculationHelper
  4. {
  5. const NON_ASCII_PLACEHOLDER = "#";
  6. const ASCII_PLACEHOLDER = "*";
  7. private static $LONG_PLACEHOLDER = "******";
  8. public static function formatPlaintext($spt) {
  9. return self::unicodeEncode($spt);
  10. }
  11. public static function unicodeEncode($spt){
  12. if(mb_check_encoding($spt, "ascii")){
  13. return $spt;
  14. }
  15. $ret = "";
  16. $len = mb_strlen($spt, "utf8");
  17. for($i=0; $i<$len; $i++){
  18. if(mb_check_encoding(mb_substr($spt, $i, 1), "ascii")){
  19. $ret .= mb_substr($spt, $i, 1);
  20. continue;
  21. }
  22. $hexB = FieldElement::fromString(mb_convert_encoding(mb_substr($spt, $i, 1), "unicode"))->toHexLowcase();
  23. $ret .= "\u" . $hexB;
  24. }
  25. return $ret;
  26. }
  27. public static function formatQueryKeyword($queryW, $placeholderForNonAscii = self::NON_ASCII_PLACEHOLDER) {
  28. $queryW = self::unicodeEncode($queryW);
  29. $len = mb_strlen($queryW);
  30. $ret = "";
  31. for($i = 0; $i < $len; $i ++){
  32. if(mb_substr($queryW, $i, 1) == $placeholderForNonAscii){
  33. $ret .= self::$LONG_PLACEHOLDER;
  34. } elseif (mb_substr($queryW, $i, 1) == self::ASCII_PLACEHOLDER) {
  35. $ret .= self::ASCII_PLACEHOLDER;
  36. } else {
  37. $ret .= mb_substr($queryW, $i);
  38. break;
  39. }
  40. }
  41. return $ret;
  42. }
  43. public static function generateWildcardKeyword($queryW, $asciiCharPrefixNumber, $nonAsciiCharPrefixNumber) {
  44. $length = $asciiCharPrefixNumber + $nonAsciiCharPrefixNumber * 6;
  45. if($length == 0){
  46. return $queryW;
  47. }
  48. $ret = str_repeat(self::ASCII_PLACEHOLDER, $length);
  49. return $ret . $queryW;
  50. }
  51. }