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

Фанат

oncle terrible
Команда форума
shelestov вообще-то, к данной проблеме слеши не имеют отношения никакого.
Их не надо ни убирать, ни добавлять - они тут вообще не при чём.
 

Andkorol

Новичок
Как вариант - при выводе значений в полях формы можно заменять кавычки на их сущности
( напр. упрощенно на ″ ).
В вашем случае:
PHP:
<input type="text" name="title" value="<?=str_replace('"', '&#8243;', $news[$i]['title']);?>" />
Соответственно, перед сохранением в БД - нужно выполнить обратную замену
(если критично наличие именно кавычек в тексте).
 

Фанат

oncle terrible
Команда форума

Фанат

oncle terrible
Команда форума
Andkorol
Ну вот я и спрашиваю - это точно нужно делать? (в указанном случае)
 

Вурдалак

Продвинутый новичок
Andkorol, ты же заикнулся об «обратном преобразовании». Ты считаешь, что в input.value будет лежать строка с «&#8243;» (пользователь увидит эти 7 символов у себя в поле ввода)? А проверить?
 

Andkorol

Новичок
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

Новичок
Andkorol, «&#8243;» — это НЕ символ «"», это символ «″». Короче говоря, смотри http://php.net/htmlspecialchars
Начали об одном, закончили совсем о другом.

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

Ну и вот вам ещё один повод для "обратного преобразования"...
 

Вурдалак

Продвинутый новичок
Andkorol, тут речь идёт о понятии экранирования символов. Заменяя одни символы совсем другими (пусть и похожими внешне) ты так и не поймёшь что это такое. Твоя страница, очевидно, интерпретируются в каком-нибудь windows-1251, а этого символа там нет, поэтому браузер посылает их в таком виде. Никакого обратного преобразования делать не нужно.
 

shelestov

я тут часто
shelestov вообще-то, к данной проблеме слеши не имеют отношения никакого.
Их не надо ни убирать, ни добавлять - они тут вообще не при чём.
Я не правильно выразился, имел ввиду эскейпить вывод. К примеру htmlspecialchars();
 

Andkorol

Новичок
Твоя страница, очевидно, интерпретируются в каком-нибудь windows-1251, а этого символа там нет, поэтому браузер посылает их в таком виде. Никакого обратного преобразования делать не нужно.
Проверил кодировки - виновен!!!
( - о, горе мне... - хотя разве только мне... - пойду убьюсь...))))

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

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