X-HTTP-Method-Override в jQuery?

Ответ на меня, поскольку FAQ этого сайта поощряет его. Это работает на меня:

äåà символов Mostly ¶ не являются проблематичным как набором символов по умолчанию, используемым браузерами, и кот/Java для веб-приложений является latin1 т.е. ISO-8859-1, который "понимает" те символы.

Для получения UTF-8, работающего под Java+Tomcat+Linux/Windows+Mysql, требует следующего:

Tomcat Конфигурирования server.xml

необходимо настроить это, коннектор использует UTF-8 для кодирования URL (ПОЛУЧИТЕ запрос), параметры:


ключевая роль, являющаяся URIEncoding = "UTF-8" в вышеупомянутом примере. Это гарантирует, что дескрипторы Tomcat все поступление ПОЛУЧАЮТ параметры как закодированный UTF-8. В результате, когда пользователь пишет следующее в строку поиска браузера:

 https://localhost:8443/ID/Users?action=search&name=*ж*

символ Р ¶ обрабатывается как UTF-8 и кодируется к (обычно браузером перед ровным получением к серверу) как [1 128] %D0%B6.

запрос POST не затронуты этим.

CharsetFilter

Тогда пора вынудить веб-приложение Java обработать все запросы и ответы как закодированный UTF-8. Это требует, чтобы мы определили фильтр набора символов как следующее:

package fi.foo.filters;

import javax.servlet.*;
import java.io.IOException;

public class CharsetFilter implements Filter {

    private String encoding;

    public void init(FilterConfig config) throws ServletException {
        encoding = config.getInitParameter("requestEncoding");
        if (encoding == null) encoding = "UTF-8";
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
            throws IOException, ServletException {
        // Respect the client-specified character encoding
        // (see HTTP specification section 3.4.1)
        if (null == request.getCharacterEncoding()) {
            request.setCharacterEncoding(encoding);
        }

        // Set the default response content type and encoding
        response.setContentType("text/html; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        next.doFilter(request, response);
    }

    public void destroy() {
    }
}

Этот фильтр удостоверяется что, если браузер не установил кодирование, используемое в запросе, что это установлено на UTF-8.

другая вещь, сделанная этим фильтром, состоит в том, чтобы установить кодирование ответа по умолчанию т.е. кодирование, в котором возвращенный HTML/независимо от того, что. Альтернатива должна установить ответ, кодирующий и т.д. в каждом контроллере приложения.

Этот фильтр должен быть добавлен к web.xml или дескриптор развертывания веб-приложения:

  

  
    CharsetFilter
    fi.foo.filters.CharsetFilter
      
        requestEncoding
        UTF-8
      
  

  
    CharsetFilter
    /*
  

инструкции для того, чтобы сделать этот фильтр найдены в кот Wiki ( http://wiki.apache.org/tomcat/Tomcat/UTF-8 )

страница JSP, кодирующая

В Вашем web.xml , добавляют следующее:


    
        *.jsp
        UTF-8
    

, С другой стороны, все JSP-страницы веб-приложения должны были бы иметь следующее наверху их:

 <%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>

, Если некоторое расположение с различными JSP-фрагментами используется, то это необходимо в [1 130] весь из них.

метатеги HTML

кодирование страницы JSP говорит JVM обрабатывать символы на странице JSP в корректном кодировании. Тогда пора сказать браузер, в котором кодирование страницы HTML:

Это сделано со следующим наверху каждой xhtml страницы, произведенной веб-приложением:

   
   
   
   
   
   ...

соединение JDBC

При использовании дб, это должно быть определено, что соединение использует кодировку UTF-8. Это сделано в [1 131] context.xml или везде, где соединение JDBC определяется следующим образом:

      

база данных MySQL и таблицы

используемая база данных должна использовать кодировку UTF-8. Это достигается путем создания базы данных со следующим:

   CREATE DATABASE `ID_development` 
   /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci */;

Затем все таблицы должны быть в UTF-8 также:

   CREATE TABLE  `Users` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `name` varchar(30) collate utf8_swedish_ci default NULL
    PRIMARY KEY  (`id`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=DYNAMIC;

ключевая роль, являющаяся CHARSET=utf8.

конфигурация сервера MySQL

MySQL serveri должен быть настроен также. Обычно это сделано в Windows путем изменения my.ini - файл и в Linux путем конфигурирования my.cnf - файл. В тех файлах это должно быть определено, что все клиенты, подключенные к серверу, используют utf8 в качестве набора символов по умолчанию и что набор символов по умолчанию, используемый сервером, также utf8.

   [client]
   port=3306
   default-character-set=utf8

   [mysql]
   default-character-set=utf8

процедуры Mysql и функции

Им также нужно было определить набор символов. Например:

   DELIMITER $

   DROP FUNCTION IF EXISTS `pathToNode` $
   CREATE FUNCTION `pathToNode` (ryhma_id INT) RETURNS TEXT CHARACTER SET utf8
   READS SQL DATA
   BEGIN

    DECLARE path VARCHAR(255) CHARACTER SET utf8;

   SET path = NULL;

   ...

   RETURN path;

   END $

   DELIMITER ;

ПОЛУЧАЮТ запросы: latin1 и UTF-8

, Если и когда это определяется в server.xml кота, который ПОЛУЧАЕТ параметры запроса, кодируются в UTF-8, следующее ДОБИРАЮТСЯ, запросы обработаны правильно:

   https://localhost:8443/ID/Users?action=search&name=Petteri
   https://localhost:8443/ID/Users?action=search&name=ж

, поскольку символы ASCII кодируются таким же образом и с latin1 и с UTF-8, строка "Petteri" обрабатывается правильно.

символ кириллицы Р ¶ не понят вообще в latin1. Поскольку Tomcat проинструктирован для обработки параметров запроса как UTF-8, это кодирует тот символ правильно [1 135] %D0%B6.

, Если и когда браузеры проинструктированы, чтобы прочитать страницы в кодировке UTF-8 (с заголовками запроса и метатегом HTML), по крайней мере, Firefox 2/3 и другие браузеры с этого периода, все кодируют символ сами [1 136] %D0%B6.

конечный результат состоит в том, что все пользователи с именем "Petteri" найдены, и также все пользователи с именем "Р ¶" найдены.

, Но что относительно äåà ¶?

Спецификация HTTP определяет, это URL по умолчанию кодируется как latin1. Это приводит к firefox2, firefox3 и т.д. кодирование следующего

    https://localhost:8443/ID/Users?action=search&name=*Päivi*

в к закодированной версии

    https://localhost:8443/ID/Users?action=search&name=*P%E4ivi*

В latin1 символ , Г¤ кодируется как [1 138] %E4. Даже при том, что page/request/everything определяется для использования UTF-8. Закодированная версия UTF-8 Г¤ %C3%A4

, которым результат этого состоит в том, что это довольно невозможно для веб-приложения к дескриптору correly, параметры запроса от ПОЛУЧАЮТ запросы, поскольку некоторые символы кодируются в latin1 и других в UTF-8. Уведомление: запросы POST действительно работают, поскольку браузеры кодируют все параметры запроса от форм полностью в UTF-8, если страница определяется как являющийся Материалом UTF-8

для чтения

А очень большое спасибо за писателей следующего для предоставления ответов для моей проблемы:

  • http://tagunov.tripod.com/i18n/i18n.html
  • http://wiki.apache.org/tomcat/Tomcat/UTF-8
  • http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/
  • http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
  • http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-tomcat-jsp-etc.html
  • http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-for-mysql-tomcat.html
  • http://jeppesn.dk/utf-8.html
  • http://www.nabble.com/request-parameters-mishandle-utf-8-encoding-td18720039.html
  • http://www.utoronto.ca/webdocs/HTMLdocs/NewHTML/iso_table.html
  • http://www.utf8-chartable.de/

Важное примечание

поддерживает Основная Многоязычная Плоскость использующие 3-байтовые символы UTF-8. Если необходимо выйти на улицу из того (определенные алфавиты требуют больше чем 3 байтов UTF-8), то или необходимо использовать разновидность [1 115] тип столбца или использовать utf8mb4 набор символов (который требует MySQL 5.5.3 или позже). Просто знайте, что с помощью utf8 набор символов в MySQL не будет работать 100% времени.

Tomcat с Apache

Еще одна вещь при использовании Apache + Tomcat + mod_JK коннектор тогда Вы также должна сделать следующие изменения:

  1. Добавляют URIEncoding = "UTF-8" в кота файл server.xml для 8 009 коннекторов, это используется mod_JK коннектором.
  2. Goto Ваша апачская папка т.е. /etc/httpd/conf и добавляют AddDefaultCharset utf-8 в [1 121]. Примечание: Первая проверка, которая это, существует или нет. Если существуют, можно обновить его с этой строкой. Можно добавить эту строку в основе также.

16
задан Brian Tompsett - 汤莱恩 4 July 2015 в 13:21
поделиться

1 ответ

You could set custom headers when performing an ajax request by using the beforeSend callback:

$.ajax({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('X-HTTP-Method-Override', 'PUT');
    },
    type: 'POST',
    url: '/someurl',
    success: function(data){
        // do something...
    }
});
26
ответ дан 30 November 2019 в 15:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: