Vue: Неразрывный пробел действует иначе, чем другие символы - выводит "" в шаблоне при передаче через реквизиты

Созданный на 4 окт. 2018  ·  11Комментарии  ·  Источник: vuejs/vue

Версия

2.5.17

Ссылка для воспроизведения

https://codepen.io/avertes/pen/LYYpNRe
https://jsfiddle.net/50wL7mdz/756973/

Действия по воспроизведению

  1. Создайте новый компонент, который принимает строковую опору.
  2. Отобразите опору в шаблоне компонента.
  3. Используйте компонент в приложении Vue и передайте строку, содержащую неразрывный пробел для свойства.

Что ожидается?

Вывод должен содержать неразрывный пробел

Что на самом деле происходит?

Вывод показывает  


В приведенном примере я сделал 3 случая

  • Первый случай:   превращается в  
  • Во втором случае в длинном списке символов UTF-8 экранируется только NON-BREAKING SPACE .
  • И в-третьих, при получении того же списка символов, но при извлечении его из обычного HTMLElement с document.querySelector('#test').title символ не экранируется.

Примечание . При копировании неразрывного пробела он может превратиться в обычное пространство в буфере обмена. Для этого используйте https://en.wikipedia.org/wiki/Non-breaking_space#Keyboard_entry_methods, чтобы убедиться, как вставить символ.

Самый полезный комментарий

в качестве обходного пути попробуйте поместить escape-код JS для   - \xa0

нашел здесь , работал у меня в функции без взлома

    public static noBreakingSpaces(str: string): string {
        return str.replace(' ', '\xa0');
    }

строки, возвращаемые этой функцией, отображаются с &nbsp s вместо пробелов.

Все 11 Комментарий

Я добавил новый пример - где в списке сущностей html (включая другие пробелы и символы нулевой ширины) только   не декодируется.

Также я заметил, что в mathiasbynens / he есть две записи для   одна без simicolon и одна с simicolon.

Может быть, выстрел в темноте, но может ли это повлиять на результат выше?

Я пробовал использовать mathiasbynens / he v1.1.1, чтобы найти какие-либо несоответствия с   , но не смог их найти.

Я пробовал дублировать свои предыдущие jsfiddles, чтобы посмотреть, отреагирует ли   другому.

Если кто-нибудь может дать мне несколько указаний о том, где искать эту ошибку, я более чем счастлив попробовать.

Я также был бы очень признателен за любой ответ по этому вопросу.

Для меня это ошибка - было бы неплохо исправить

Иногда я замечал проблемы с × . скажем, опора компонента имеет значение по умолчанию × , которое отображается в компоненте (v-html). При рендеринге он показывает фактический символ x и вызывает залог гидратации SSR.

Другой пример: https://jsfiddle.net/onbzk0m6/ (символ)

Да, похоже, это связано с тем, как Vue анализирует атрибуты html в целом.

Я сделал аналогичный пример на основе примера @approached
https://jsfiddle.net/onbzk0m6/3/

в качестве обходного пути попробуйте поместить escape-код JS для   - \xa0

нашел здесь , работал у меня в функции без взлома

    public static noBreakingSpaces(str: string): string {
        return str.replace(' ', '\xa0');
    }

строки, возвращаемые этой функцией, отображаются с &nbsp s вместо пробелов.

Я наткнулся на ту же проблему: сущность html при использовании в шаблонах вместо мягкого дефиса приводит к тексту "". То же самое для "" и других.
Vue 2.6.10

для людей, которые ищут обходной путь для этого:
При передаче строки с неразрывными пробелами в качестве опоры я просто заменил пробелы символами, которые вряд ли будут частью строки, в моем случае 'zzz'
var newName = program_name.replace(/\s/g,'zzz');

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

correctedProgramName(){ //this reverses the space-replacing we had to do in reporting-dashboard.js
        let correctedProgramName = this.program_name.replace(/zzz/g, ' ')
        return correctedProgramName
      }

@posva Извините за беспокойство, я нашел решение этой проблемы.

После моего исправления поведение Vue будет таким же, как и в HTML, как на скриншоте ниже,

Могу ли я решить эту проблему и отправить запрос на слияние?

image

image

Конечно @JuniorTour

Эта проблема может быть связана с https://github.com/vuejs/vue/issues/10485 и https://github.com/vuejs/vue/issues/11059.
Так что стоит взглянуть и на существующие PR.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги