Вставьте текст в текстовую область, используя JavaScript без разбора текста JavaScript - PullRequest
2 голосов
/ 21 апреля 2011
'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">'
+ SOME VARIABLE FULL OF TEXT
+ '</textarea>'

Предыдущее является просто частью простой строки, которую я использую с изменением атрибута innerHTML элемента div внутри функции javascript. Проблема «НЕКОТОРЫЕ ПЕРЕМЕННЫЕ ПОЛНЫЕ ТЕКСТА» является проблемой, если эта переменная содержит строку, содержащую анализируемые данные javascript (данные для интерпретации), такие как дополнительные символы или цитаты и т. Д. - сценарий прерывается. Как мне избежать этого? Кстати, переменная является динамической для каждого пользователя, она заполняется оператором php echo и поэтому вставляется в бэкэнд в javascript. Я думал о том, как сделать это по-другому, но никто не приходит в голову. Данные взяты из базы данных, я извлекаю их с помощью PHP, и мне нужно вставить их в эту текстовую область, которая динамически создается и вставляется в страницу на основе пользовательской команды через innerHTML. Спасибо за любую помощь.

Редактировать: запрошенная контекстная функция:

else if (theChange == 'signature') {
        document.getElementById('userPanelChangeBox').innerHTML = 
        '<form action="tinUser_processor.php" method="post">'
        +'Signatures cannot contain any markup (HTML, BBCode, etc) or styling and can only be 4 lines<br />'
        +'Enter your new signature:<br /><br />'
        +'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">'
        +'<?php echo $userInfo['signature']; ?>'+'</textarea><br /><br />'
        +'<input type="hidden" value="signature" name="typeChange" />'
        +'<input type="submit" value="Submit Change" name="submitter" /></form>';
        }

Ответы [ 3 ]

1 голос
/ 21 апреля 2011

Вам необходимо преобразовать любые специальные символы в HTML-сущности на сервере , когда к клиенту уже слишком поздно. e.g.:

"foo <= bar"

становится

&ldquo;foo &le; bar&rdquo;

и затем при вставке в строку становится:

"&ldquo;foo &le; bar&rdquo;"

, а не

""foo <= bar""

, который явно испортит сценарий на клиенте. Вы также можете использовать escape-последовательности Юникода.

1 голос
/ 21 апреля 2011

Похоже, вам нужно экранировать HTML и одинарные кавычки. Для этого вы можете использовать встроенную в PHP функцию htmlentities , например:

<?php echo htmlentities($userInfo['signature'], ENT_QUOTES); ?>
0 голосов
/ 21 апреля 2011

Если вам нужно сделать это на клиенте по другим причинам, это работает (проверено):

<textarea id=text></textarea>
<script type="text/javascript">
var signature = "<div>Not actually a div.</div>";
document.getElementById('text').value=signature;

Итак, что-то вроде этого будет работать (не проверено):

else if (theChange == 'signature') {
    document.getElementById('userPanelChangeBox').innerHTML = 
    '<form action="tinUser_processor.php" method="post">'
    +'Signatures cannot contain any markup (HTML, BBCode, etc) or styling and can only be 4 lines<br />'
    +'Enter your new signature:<br /><br />'
    +'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">'
    +'</textarea><br /><br />'
    +'<input type="hidden" value="signature" name="typeChange" />'
    +'<input type="submit" value="Submit Change" name="submitter" /></form>';
    document.getElementById('userPanelChangeBox').textChange.value='<?php echo $userInfo['signature']; ?>';
    }
...