"?" символ в БД MSSQL заменяется на (заглавная A с серьезным ударением) при отображении сценарием ASP - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь обеспечить поддержку устаревшего веб-приложения ASP / MSSQL - я не участвовал в разработке программного обеспечения (компания, которая его создала, больше не существует), и я не являюсь администратором сервера где он размещен, я просто управляю хостингом для владельцев сайта через учетную запись посредника. Я также не являюсь разработчиком ASP (в большей степени PHP-разработчиком) и не настолько хорошо знаком с ним - с обновлениями строк подключения к БД после миграции сервера и т. Д.

Проблема в том, что рассматриваемый сайт хранит содержимое отдельных страниц в базе данных MSSQL, и большая часть содержимого содержит ссылки. Почти все внутренние ссылки на сайте имеют формат, подобный «main.asp? 123» (где «123» - это идентификатор строки базы данных). Проблема в том, что, начиная примерно с последних 8 месяцев или около того *, что-то заставляло ссылки в содержимом БД отображаться как «main.aspÀ123» вместо этого - другими словами, «?» символ заменяется символом «А» (заглавная буква А с серьезным акцентом). Что, конечно, нарушает все эти ссылки. Обратите внимание, что Stackoverflow не позволяет мне включать этот символ в заголовок сообщения, потому что кажется, что он указывает на то, что я пишу на испанском ...?

(* к сожалению, я не знаю сроков за это время, владельцы сайта не знали, когда проблема начала возникать, поэтому все, что мне нужно, - это снимок archive.org с прошлого октября, где он работал )

Я попытался вручную изменить "?" символ в одной из соответствующих записей БД для «?» (HTML-сущность для знака вопроса), но это не имело никакого значения. Я также проверил кодировку символов в HTML-коде, используемом для отображения содержимого, но это также не является причиной - те же файлы ASP содержат жестко запрограммированные ссылки на некоторые из тех же страниц (отформатированные точно так же) и те работают правильно: "?" не заменяется.

Я также подключился к базе данных напрямую с помощью приложения MSSQL Management Studio Express, но не смог найти какие-либо параметры кодировки / кодировки символов ни для базы данных, ни для таблицы.

И я пытался связаться с хостинг-провайдером, но они (M247 UK, на случай, если кому-то интересно) смехотворно бесполезны. Ответы от них были примерно такими: "durrrrrr, мы проверили совершенно другую ссылку, которая на самом деле не была той, которую вы четко описали И выделили на скриншоте, и она работает, когда мы проверяем неправильную ссылку, поэтому проблема должна быть решенным, верно? Достаточно сказать, что я не рекомендовал бы их - раньше был клиентом хостинга RedFox, и качество клиентов значительно упало с тех пор, как M247 купил их.

Есть предложения? Если бы это был PHP / MySQL, я бы, вероятно, начал с создания небольшого тестового сценария, который ничего не делал, кроме как извлекал одну из соответствующих записей и отображал ее содержимое, чтобы сузить проблему - но я не достаточно знаком с ASP, чтобы делать что здесь, по крайней мере, без достаточного количества googl'ing (и большая часть информации, которую я могу найти, специфична для ASP.net).

Редактировать: поток, предложенный в качестве решения, кажется, предназначен для проблем кодировки символов, когда записывает в MSSQL, а не читает из него - и я пробовал решения, предложенные в этом нить, никто не имеет никакого значения.

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Я нашел обходной путь, который, кажется, делает свое дело: ранее я пытался заменить ? в коде на &#63 (вынул ;, чтобы он показывал код, а не вывод), который не сработал.НО это, кажется, работает, если я вместо этого использую &quest.

Одна вещь, чтобы заметить, казалось, что я изначально ошибался, думая, что проблема затрагивала только чтение / отображение содержимого из БД MSSQL.Скорее всего, похоже, что та же проблема возникала и со статическим содержимым, которое «эходировалось» кодом в сценариях ASP (я скорее специалист по PHP, но не уверен, что правильный термин для ASP эквивалентен echo, это).Хотя ссылки, которые были жестко закодированы как статические (скорее HTML, динамически выводимый ASP), не были затронуты.Хотя переключение с ? на &quest сработало и для них (самой сложной задачей было найти файл, который мне нужно было отредактировать).

0 голосов
/ 20 июня 2019

Похоже, вы конвертируете из UNICODE в ASCII где-то вдоль линии ...

Взгляните на это, чтобы быстро увидеть, что происходит. В частности, обратите внимание на ascii, полученный из inr, в сравнении с ascii, полученным из unicode ...

SELECT 
    t.n,
    ascii_char = CHAR(t.n),
    unicode_char = NCHAR(t.n),
    unicode_to_ascii = CONVERT(varchar(10), NCHAR(t.n))
FROM (
    SELECT TOP (1024)
        n = ROW_NUMBER() OVER (ORDER BY ao.object_id)
    FROM 
        sys.all_objects ao
    ) t
WHERE 1 = 1
    --AND CONVERT(varchar(10), NCHAR(t.n)) ='À'
;
...