Проблема здесь в том, что при чтении сущности HTML из DOM, сущность анализируется, поэтому последовательность символов ‍
превращается в одиночный символ ZERO WIDTH JOINER.
Ваш подход будет работать, если выдолжны были запустить JavaScript в командной строке:
$ node
> s = '<div>‍احترام</div>'
'<div>‍احترام</div>'
> s.includes("‍ا")
true
Даже в браузере, если вы используете консоль JavaScript напрямую, все работает нормально, как вы ожидали:
Так что же отличается от чтения из DOM (в вашем случае, с jQuery)?Чтобы увидеть, что происходит, давайте проверим фактические символы в строке:
$(document).ready(function(){
var htm=$("div").text();
console.log(Array.from(htm));
console.log(Array.from("‍ا"));
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>‍احترام</div>
Это дает:
Ага, поэтому jQuery анализирует HTMLюридическое лицо!Поэтому текст, который вы хотите найти, должен иметь JavaScript zwj, а не HTML.Укажите это так:
$(document).ready(function(){
var htm=$("div").html();
var shouldRemove="\u{200d}ا";
if (htm.includes(shouldRemove)){
console.log('found');
}
else{
console.log('not found');
}
})
body{font-size:26pt}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>‍احترام</div>
Теперь он выводит true
.
Так что все хорошо с RTL (направление текста)!Оказывается, все зависит от того, когда HTML-сущности анализируются.:)