Дважды оставленный Unicode проблема JavaScript

Из документации onValueChange возвращает значение и индекс в его заднюю часть. https://facebook.github.io/react-native/docs/picker

onValueChange={(itemValue, itemIndex) => { 
  //do something here 
}

Если вы хотите получить ключ, значение и метку, вы должны найти их в данные, которые вы предоставляете сборщику. Вы должны быть в состоянии использовать индекс с этим.

Несмотря на то, что вы включаете начальный элемент выбора, который не включен в ваши данные, вам, возможно, придется настроить индекс на единицу, чтобы получить доступ к правильному значению.

onValueChange={(itemValue, itemIndex) => { 
  let item = this.state.data[itemIndex]
  // now do something here 
}

9
задан Jon Seigel 9 May 2010 в 04:31
поделиться

5 ответов

Это ужасное решение, но вы можете сделать это:

var x = "this is a \u201ctest\u201d".replace(/\/g,'\\')
// x is now "this is a \u201ctest\u201d"
eval('x = "' + x + '"')
// x is now "this is a “test”"

Это ужасно, потому что:

  • eval может быть опасным, если вы не знаете, что в строке

  • , кавычки в строке в выражении eval прервутся, если в вашей строке есть реальные кавычки

1
ответ дан 4 December 2019 в 22:31
поделиться

Как оказалось, нам нужен unescape (), но с "% uXXXX", а не с \ uXXXX " :

экранирования в (yourteststringhere.replace (/ & # 92; / г, '%'))

6
ответ дан 4 December 2019 в 22:31
поделиться

Вы уверены '\', единственный символ, который мог бы быть оставлен из HTML? Вы - верный '\uXXXX' действительно ли единственное, вид строкового используемого Escape?

В противном случае Вам будут нужны HTML-character/entity-reference-decoder общего назначения и JS-string-literal-decoder. К сожалению, JavaScript не имеет никаких встроенных методов для этого, и это довольно утомительно, чтобы сделать вручную с загрузкой regexps.

Возможно использовать в своих интересах декодер HTML браузера путем присвоения строки innerHTML свойству элемента и затем попросить, чтобы JavaScript декодировал строку как выше:

var el= document.createElement('div');
el.innerHTML= s;
return eval('"'+el.firstChild.data+'"');

Однако это - невероятно ужасный взлом и дыра в системе безопасности, если строка прибывает из источника, который не составляет 100%, которым доверяют.

Куда строки прибывают из? Было бы более хорошо, если это возможно, иметь дело с проблемой в конце сервера, где можно иметь более мощные текстовые функции обработки в наличии. И если Вы могли бы зафиксировать то, что это, это излишне выходит из HTML Ваши обратные косые черты, Вы могли найти, что проблема фиксирует себя.

1
ответ дан 4 December 2019 в 22:31
поделиться

Я не уверен, является ли это этим, но ответ мог бы иметь некоторое отношение к оценке (), если можно доверять входу.

0
ответ дан 4 December 2019 в 22:31
поделиться

Я думал в том же духе, но использование eval () во всех отношениях, которые я мог себе представить, приводило к одному и тому же экранированному выводу; например,

eval(new String("this is a \u201ctest&#amp;92;u201d"));

или даже

eval(new String("this is a \u201ctest&#amp;92;u201d".replace('/\/g','\')));

все приводит к одному и тому же результату:

"this is a \u201ctest\u201d";

Это как если бы мне нужно было заставить движок Javascript каким-то образом переоценить или повторно проанализировать строку, но я не знаю, что бы сделай это. Я подумал, что, возможно, eval () или просто создание новой строки с использованием правильно экранированного ввода сделает это, но теперь удача.

Основной вопрос - что мне нужно сделать, чтобы превратить данную строку:

"this is a \u201ctest&#amp;92;u201d"

в строка, которая использует правильные символы Unicode?

0
ответ дан 4 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: