Как преобразовать умные кавычки Word и их тире в строку? - PullRequest
25 голосов
/ 06 октября 2008

У меня есть форма с текстовой областью. Пользователи вводят блок текста, который хранится в базе данных.

Иногда пользователь вставляет текст из Word, содержащий умные кавычки или вставки. Эти символы появляются в базе данных как:,, 1003 *

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

Я работаю в PHP.

Обновление: спасибо за все замечательные ответы до сих пор. Страница на сайте Джоэла о кодировках очень информативна: http://www.joelonsoftware.com/articles/Unicode.html

Некоторые примечания по моей среде:

База данных MySQL использует кодировку UTF-8. Аналогично, HTML-страницы, которые отображают контент, используют UTF-8 (Update :), явно указав мета-тип контента.

На этих страницах умные кавычки и пометки отображаются в виде ромба с вопросительным знаком.

Решение:

Еще раз спасибо за ответы. Решение было двояким:

  1. Убедитесь, что база данных и HTML файлы были явно установлены для использования Кодировка UTF-8.
  2. Используйте htmlspecialchars() вместо htmlentities().

Ответы [ 13 ]

1 голос
/ 06 октября 2008

Мы часто используем для этого стандартные функции замены строк. Хотя природа ASCII / Unicode в этом контексте довольно мутная, она работает. Просто убедитесь, что ваш php файл сохранен в правильном формате кодировки и т. Д.

0 голосов
/ 11 февраля 2016

На самом деле проблема не в PHP, а в JavaScript, это происходит из-за копирования / вставки из Word, поэтому вам нужно решить свою проблему в JavaScript, прежде чем передавать текст в PHP. Пожалуйста, посмотрите этот ответ https://stackoverflow.com/a/6219023/1857295.

0 голосов
/ 07 октября 2008

Возможно, это не самое лучшее решение 1002 *, но я бы попробовал проверить, чтобы увидеть, что видит PHP. Допустим, он видит «-» (есть несколько других возможностей, например, «» или, может быть, «»). Затем выполните str_replace, чтобы избавиться от всех этих и заменить их обычными кавычками, прежде чем помещать ответ в базу данных.

Лучшее решение, вероятно, заключалось бы в том, чтобы сквозные данные проходили через все UTF-8, поскольку люди пытаются помочь с другими ответами.

...