Incorrect string value: '\xE4\xEE\xC3\xD8\xEF\xE6...'
Это похоже на арабскую строку, закодированную в ISO-8859-6.Вы получите эту ошибку, если вы получили строку байтов ISO-8859-6 и пытаетесь вставить ее в таблицу базы данных UTF-8.
Ваш сценарий не должен был получить ISO-8859-6 отбраузер, если ваша страница формы правильно помечена как UTF-8, как подразумевается meta
.Проверьте в браузере, что при отображении формы в меню «Вид-> Кодировка» установлен флажок «UTF-8».<meta>
может быть переопределено веб-сервером, передающим реальный заголовок Content-Type: text/html;charset=...
.
Это также может произойти, если ваш PHP пытается использовать неправильную кодировку для связи с сервером.Я вижу, что вы закомментировали SET NAMES
... Я бы использовал mysql_set_charset
('utf8');
в предпочтении.
echo "<td>" . $row['cQuotes'] . "</td>";
Вам необходимо кодировать HTML-код для выводаздесь, но не из-за проблем с кодировкой.Любые символы <
и &
требуют кодирования в тексте, в противном случае они могут внедрить нежелательную разметку HTML, включая JavaScript, в этом случае у вас возникают проблемы с межсайтовым скриптингом.
echo '<td>'.htmlspecialchars($row['cQuotes']).'</td>';
В сторону: ..Однако PHP - это язык шаблонов.Используйте его, не боритесь с ним, пытаясь самостоятельно создавать шаблоны строк.
<table>
<?php while ($row= mysql_fetch_array($result)) { ?>
<tr>
<td width="150"><?php h($row['vAuthor']) ?></td>
<td><?php h($row['cQuotes']) ?></td>
</tr>
<?php } ?>
</table>
(width="150px"
не работает, px
только для CSS.) Выше предполагается, что вспомогательная функция похожа наэто, чтобы вам не пришлось набирать htmlspecialchars
так много:
function h($s) {
echo htmlspecialchars($s, ENT_QUOTES);
}