2014-03-21 4 views
1

В DATATypes базы данных VARCHAR и TEXT я вижу, как символы появляются перед каждым пространством после того, как содержимое вставлено или обновлено из полей HTML TEXTAREA.Странный символ, появляющийся в тексте в mysql

Когда я vardump данные PHP перед вставкой/обновлением, символов Â нет.

Я попытался преобразовать базу данных и таблицы из сопоставления по умолчанию latin1_swedish_ci по умолчанию в utf8_general_ci, а затем снова вставить/обновить данные, но символы все еще появляются в тексте перед каждым пространством.

Я, честно говоря, не очень хорошо разбираюсь в сортировке и кодировке символов и думал, что все будет хорошо, если оставить по умолчанию, но потом я столкнулся с этой проблемой. Как я могу предотвратить появление этих дополнительных символов?

[изменить]: Если я обновляю текст базы данных в первый раз, дополнительные символы не отображаются. Если я загружу текст из поля базы данных, а затем обновляю его второй раз, появятся символы Â.

+0

Вы не просматриваете этот текст в качестве UTF-8. Может быть, ISO-8859-1? – AbraCadaver

+0

сравнение не имеет ничего общего с этим. Сортировка в основном «в алфавитном порядке» и определяет, будет ли, например, немецкий кольцевой сортимент сортироваться после В или после S. – Tularis

+0

UTF-8 * полностью * от AZ –

ответ

1

Оказалось, что существует проблема с библиотекой PHP, которую я использовал для создания полей ввода/textarea. Для полей textarea он заменял все пробелы в значении специальными символами nbsp. Поэтому при хранении и повторной сохранении этого значения в базе данных все пошло немного странно. Я отключил эту функцию.

Спасибо всем за то, что нашли время, чтобы предложить свои предложения.

1

Попробуйте выполнить SET NAMES 'utf8' в базе данных. Также проверьте кодировку ваших файлов PHP.

+0

Я быстро прочитал, и, похоже, было много сообщений о специально * не *, чтобы использовать 'SET NAMES'. Что это на самом деле? По умолчанию файлы PHP - cp1252. –

+0

Ha-Ha! Похоже, я понял, в чем проблема. Страница с полями формы была cp1252, но файлы PHP библиотеки были UTF-8. Когда я использовал функцию из этой библиотеки, дополнительные символы, казалось, нашли свой путь в строке. –

+0

Опять же, может и нет. Я все еще вижу персонажей. Вздох. –

1

Я думаю, у вас может быть скрытый не-ascii в тексте/html. Возможно, вы должны попытаться использовать

$text= str_replace('`', "'", $text); 
$text= preg_replace("/[^(\x20-\x7F)]*/",' ', $text); 

, чтобы удалить символы, отличные от ascii, прежде чем вставлять их в базу данных.

+0

Это не разделяет «все тексты без ascii», это * только * strips '\ xA0', который является единственным символом. Многие миллиарды других персонажей, не относящихся к ascii, существуют (и часто используются!) – Tularis

+0

Вы правы. Я обновил свой ответ –

+0

Но, насколько я могу судить, на PHP-стороне вещей нет специальных символов. Когда я это пробовал, он разделил пробелы (и, в свою очередь, разделил символы Â). Я не знаю, почему этот подход внезапно понадобится. Я * не хочу вычеркивать пунктуацию, символы клавиатуры или пробелы. –

Смежные вопросы