кавычки (непонятки)

  • Автор темы Автор темы KorP
  • Дата начала Дата начала
shelestov вообще-то, к данной проблеме слеши не имеют отношения никакого.
Их не надо ни убирать, ни добавлять - они тут вообще не при чём.
 
Как вариант - при выводе значений в полях формы можно заменять кавычки на их сущности
( напр. упрощенно на ″ ).
В вашем случае:
PHP:
<input type="text" name="title" value="<?=str_replace('"', '&#8243;', $news[$i]['title']);?>" />
Соответственно, перед сохранением в БД - нужно выполнить обратную замену
(если критично наличие именно кавычек в тексте).
 
это точно? информация проверена?
Я вроде уточнил - в каком случае это нужно сделать:
(если критично наличие именно кавычек в тексте)
wink.png
 
Andkorol
Ну вот я и спрашиваю - это точно нужно делать? (в указанном случае)
 
Andkorol, ты же заикнулся об «обратном преобразовании». Ты считаешь, что в input.value будет лежать строка с «&#8243;» (пользователь увидит эти 7 символов у себя в поле ввода)? А проверить?
 
Andkorol, ты же заикнулся об «обратном преобразовании». Ты считаешь, что в input.value будет лежать строка с «&#8243;» (пользователь увидит эти 7 символов у себя в поле ввода)? А проверить?
Так, сначала давайте.
Вот что пишу я:
Соответственно, перед сохранением в БД - нужно выполнить обратную замену
(если критично наличие именно кавычек в тексте).
Теперь поясню, что я имею ввиду.
Имеем тестовый код:
PHP:
<?php
$test = 'Test "quotes" and "quotes again"'; 
echo $test, ' : Length - ', strlen($test),  '<br/>';
?>
<form method="post" action="">
<input type="text" name="test" value="<?=str_replace('"', '&#8243;', $test);?>" size="50" /><br/>
<input type="submit" value="sub"/><br/>
</form>
<?php
if(!empty($_POST['test'])){
    echo $_POST['test'];
    var_dump($_POST['test']);
}
?>
Смотрим вывод после отправки формы:
Test "quotes" and "quotes again" : Length - 32 ---> это у нас длина исходной строки
.... форма ....
Test ″quotes″ and ″quotes again″ ---> выглядит всё супер
string 'Test &#8243;quotes&#8243; and &#8243;quotes again&#8243;' (length=56) --->но длину имеет совершенно другую
Теперь предположим, что поле для title в БД у ТС ограничено, например 40 байт.
Что случится с нашей новой "длинной строкой" при сохранении в БД..?
 
Andkorol, «&#8243;» — это НЕ символ «"», это символ «″». Короче говоря, смотри http://php.net/htmlspecialchars
Начали об одном, закончили совсем о другом.

А я и не утверждал обратное, кстати:
( напр. упрощенно на &#8243; )
Упрощенно - потому что не нужно заморачиваться с "левой-правой" кавычками, при этом в полях формы выглядит всё как обычные двойные кавычки(в вашем сообщении, кстати, тоже).
Потому вполне подходят для задачи отображения в полях формы.

Ну и вот вам ещё один повод для "обратного преобразования"...
wink.png
 
Andkorol, тут речь идёт о понятии экранирования символов. Заменяя одни символы совсем другими (пусть и похожими внешне) ты так и не поймёшь что это такое. Твоя страница, очевидно, интерпретируются в каком-нибудь windows-1251, а этого символа там нет, поэтому браузер посылает их в таком виде. Никакого обратного преобразования делать не нужно.
 
shelestov вообще-то, к данной проблеме слеши не имеют отношения никакого.
Их не надо ни убирать, ни добавлять - они тут вообще не при чём.
Я не правильно выразился, имел ввиду эскейпить вывод. К примеру htmlspecialchars();
 
Твоя страница, очевидно, интерпретируются в каком-нибудь windows-1251, а этого символа там нет, поэтому браузер посылает их в таком виде. Никакого обратного преобразования делать не нужно.
Проверил кодировки - виновен!!!
( - о, горе мне... - хотя разве только мне... - пойду убьюсь...))))

Изменение кодировки на Unicode привело все значения к ожидаемым.

UTF-8 +1!
 
Сверху