php некоторые символы возвращают нечетный html

Возможный дубликат:
Браузер отображает � вместо ´

На моем веб-сайте, когда я копирую блок текста из чужого текстового документа, в котором используются разные символы, такие как более длинное тире и другие виды кавычек, кроме '' "", он возвращает html-мусор. Такие как:

9 am – 4 pm

похоже:

9 am � 4 pm

и

as ‘secrets’, ‘remembering/keeping,’, narratives, and ‘surprises.’

похоже:

as �secrets�, �remembering/keeping,�, narratives, and �surprises.�

мой php для вставки данных просто:

strip_tags($_POST['details']);

и мой php для вывода его на страницу в виде html:

stripslashes(linkify(nl2br(htmlentities($row['body']))));

Что я делаю неправильно?


person Dylan Cross    schedule 16.10.2012    source источник
comment
См. мой ответ на этот вопрос: stackoverflow. ком/вопросы/12220453/   -  person Jeremy Harris    schedule 16.10.2012
comment
Пропустите строку через регулярное выражение, которое удалит все небуквенно-цифровые символы и символы. РЕДАКТИРОВАТЬ: То есть, если вы хотите удалить «поврежденные» символы.   -  person Scott    schedule 16.10.2012


Ответы (3)


У вас есть символы utf в вашем html, есть множество вещей, которые вы можете сделать, лучше всего настроить заголовки в верхней части вашей php-страницы .... так же, как и курсы, упомянутые выше.

Если вы ничего не знаете о заголовках, вы должны отправить их прежде чем что-либо будет отправлено обратно в ваш браузер, поэтому они действительно должны быть вверху, если не в первой строке.

person Landon    schedule 16.10.2012
comment
Смотрите мои комментарии к CoursesWeb - person Dylan Cross; 17.10.2012
comment
Метатег, на который вы ссылаетесь, на самом деле больше не используется. Ваш сервер автоматически отправляет заголовок для Content-type, который заменяет то, что вы указали в своем метатеге. Вы можете удалить этот тег или изменить его, и это не должно иметь большой разницы. Вам действительно нужно отправить правильную кодировку как часть заголовков http. Вы можете настроить это в своем файле php.ini (я думаю), или более простой способ — просто запустить свой php-скрипт с помощью этой команды header(). - person Landon; 17.10.2012
comment
Ну, что бы я ни пробовал, что я пробовал обо всем, что я мог найти в Интернете, это даже не начало решать проблему :\ - person Dylan Cross; 17.10.2012
comment
вы поместили туда заголовок php? это предполагает, что ваш контент utf-8, вы хоть представляете, что это такое? - person Landon; 17.10.2012

Попробуйте использовать этот заголовок в PHP, прежде чем выводить данные:

if(!headers_sent()) header('Content-type: text/html; charset=utf-8');

И:

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

В HTML-документе. Кроме того, проверьте в MySQL, как регистрируются даты.

person CoursesWeb    schedule 16.10.2012
comment
на моей странице есть ‹мета http-equiv=content-type content=text/html; charset=UTF-8 /› уже установлен. - person Dylan Cross; 17.10.2012
comment
и на самом деле он вставляется в базу данных вот так, поэтому он просто выводит его вот так, он что-то делает между текстовой областью и вставкой php. - person Dylan Cross; 17.10.2012

Если кодировка вам не помогает, у меня есть хакерское решение. Если вас беспокоит только статический текст (т.е. ничего в базе данных), это может сработать. Выделите текст, скопируйте его и вставьте в обычный текстовый редактор. Если вы работаете в Windows, вам может помочь блокнот (не wordpad). Скопируйте то, что вы только что вставили, а затем вставьте это в свой файл php/html. Попробуйте, и это может заменить «плохие» символы более стандартными.

person Landon    schedule 16.10.2012
comment
Этот текст вводится в базу данных таким образом, эта проблема возникает при копировании текста из документа (например, страниц или слов) и последующем его сохранении. Похоже, что это как-то связано с вводом его в базу данных. - person Dylan Cross; 17.10.2012
comment
может тогда дело в mysql? какая у тебя там кодировка? я знаю, что latin1 используется по умолчанию в большинстве установок. Я прошел через это некоторое время назад, я изменил все таблицы на utf-8 и вывел упомянутый выше заголовок в php, и я могу показать все (акценты, китайский язык и т. д.). - person Landon; 17.10.2012
comment
Возможно, сделайте несколько запросов в вашей оболочке mysql, чтобы убедиться, что данные там не повреждены. если он хранится в сломанном формате, то вы ничего не можете сделать в мире php/html, чтобы исправить это. - person Landon; 17.10.2012
comment
Ну, я изменил свою базу данных на utf-8, но это не помогло. - person Dylan Cross; 17.10.2012