Нелегальные нестандартные кавычки в XML - PullRequest
3 голосов
/ 03 февраля 2012

Я разрешаю некоторый пользовательский ввод на моем сайте, который позже читается в XML. Время от времени я получаю эти странные одинарные или двойные кавычки, подобные ”’. Они напрямую скопированы из источника, который сломал мой XML. Мне интересно, есть ли простой способ исправить эти типы символов в моем XML. Казалось, их не трогали.

Откуда эти персонажи? Я даже не уверен, как бы я мог непреднамеренно их печатать.

РЕДАКТИРОВАТЬ - я забыл уточнить, что эти цитаты не используются в атрибутах, а следующим образом:

<SomeTag>User’s Input</SomeTag>

Ответы [ 5 ]

2 голосов
/ 03 февраля 2012

Эти кавычки используются в текстовом содержимом или для разделения атрибутов?Для разделителей атрибутов XML требует кавычки пишущей машинки (одинарные или двойные).Microsoft и другие приложения для обработки текста часто пытаются проявить смекалку и заменяют цитаты пишущей машинки типографскими, что почти наверняка является ответом на вопрос «откуда они берутся?».

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

Но вы можете сначала попытаться выяснить, почему они вызывают проблемы.Возможно, ваш поток данных не может обрабатывать ЛЮБЫЕ не-ASCII-символы, и в этом случае это более глубокая проблема, которую вы действительно должны решить (обычно это означает, что какое-то нежелательное транскодирование происходит где-то вдоль строки).

2 голосов
/ 03 февраля 2012

Не запрещать и / или изменять иностранные символы;это просто раздражает ваших пользователей!Это просто проблема кодирования.Я не знаю, какой синтаксический анализатор вы используете для чтения XML, но если он достаточно сложный, вы можете решить свою проблему, добавив следующую прагму кодировки вверху файлов XML:

<?xml version="1.0" encoding="UTF-8"?>

Также может быть опция UTF-8 в API анализатора.

Редактировать: я только что прочитал, что вы читаете XML прямо в браузере.Большинство браузеров слушают прагму кодировки!

Редактировать 2 : Очевидно, что эти кавычки даже не допустимы в UTF-8, поэтому игнорируйте то, что я сказал выше.Вместо этого вы можете найти то, что ищете здесь , где обсуждается похожая проблема.

1 голос
/ 03 февраля 2012

Если входная строка имеет кодировку UTF-8, возможно, вам нужно указать это для htmlentities (), например:

$html = htmlentities( '”’', ENT_COMPAT, "utf-8" );
echo $html;

Для меня дает:

&rdquo;&rsquo;

, тогда как

$html = htmlentities( '”’' );
echo $html;

запутывается:

&acirc;??&acirc;??

Если входная строка не UTF-8, вам необходимо соответствующим образом настроить аргумент кодирования для htmlentities ().

1 голос
/ 03 февраля 2012

Держитесь подальше от приложений MicroSoft Office.Word, Excel и т. Д. Имеют неприятную привычку заменять совпадающие пары одинарных кавычек и двойных кавычек нестандартными «умными кавычками».

Эти символы цитат действительно нестандартны и никогда не превращаются в официальныелатинский-1 набор символов.Все приложения MS Office «услужливо» заменяют стандартные символы кавычек этими мерзостями.

Просто Google для "удаления smatquotes" или "конвертировать smartquotes обратно" для подсказок подсказки и регулярные выражения, чтобы избавиться от них.

0 голосов
/ 27 октября 2016

Использование

 $s =    'User’s Input';
    $descriptfix = preg_replace('/[“”]/','\"',$s);
    $descriptfix = preg_replace('/[‘’]/','\'',$descriptfix);
echo    "<SomeTag>htmlentities($s)</SomeTag>";
...