2017-08-01 30 views
15

Tôi đã ứng dụng góc nơi mà tôi muốn vượt qua dấu cộng + trong chuỗi truy vấn như:url góc dấu cộng chuyển sang không gian

http://localhost:3000/page?name=xyz+manwal 

Khi tôi đánh URL này nó chuyển sang:

http://localhost:3000/page?name=xyz%20manwal 

đâu % 20 tham khảo không gian . Làm cách nào để ngăn chặn chuyển đổi này?

+0

tại sao bạn cần điều đó? –

+0

Tôi muốn sử dụng giá trị tên như 'xyz + manwal' trong URL đã cho hiện đang lưu' xyz manwal'. – Manwal

+0

nó chỉ URL, bất cứ nơi nào bạn đọc nó cần được phân tích một cách chính xác như một cộng, bạn không thể sử dụng cộng trong URL. Đọc [này] (https://stackoverflow.com/questions/2678551/when-to-encode-space-to-plus-or-20) –

Trả lời

1

Tôi đã tìm thấy giải pháp và đăng nó để tham khảo trong tương lai. Angular js đã chuyển đổi + đăng nhập vào %2B.

Tiếp theo đang ngăn cản rằng:

.config([ 
    '$provide', function($provide) { 
     $provide.decorator('$browser', function($delegate) { 
     let superUrl = $delegate.url; 
     $delegate.url = (url, replace) => { 
      if(url !== undefined) { 
      return superUrl(url.replace(/\%2B/g,"+"), replace); 
      } else { 
      return superUrl().replace(/\+/g,"%2B"); 
      } 
     }; 
     return $delegate; 
     }); 
    } 
    ]) 
5

Đây là vấn đề khá phổ biến. Bạn có thể truyền nó bình thường trong yêu cầu ứng dụng/x-www-form-urlencoded. Không có yêu cầu nào khác có thể phân tích cú pháp chính xác +. Họ sẽ luôn phân tích cú pháp thành% 20 thay vì% 2B.

Bạn sẽ cần phải tự thao tác các tham số truy vấn, có 2 cách:

  • Mã hóa các tham số vào mã hóa base64, cách này không có ký tự đặc biệt có thể phá vỡ bạn ứng dụng, nhưng bạn sẽ cần phải xử lý nó cũng trên phần nhận (giải mã).
  • Một giải pháp đơn giản hơn sẽ là, trước khi nhấn URL, thay thế tất cả những dấu hiệu + với% 2B. Bằng cách này phía bên kia sẽ có thể giải mã nó bình thường, mà không cần một thói quen đặc biệt.

Để biết thêm thông bạn nên reffer để hthe sau câu hỏi stack overflow Android: howto parse URL String with spaces to URI object?URL encoding the space character: + or %20?

7

này ia một vấn đề thường gặp. Ký tự + được sử dụng bởi URL để tách hai từ. Để sử dụng các nhân vật + trong các giá trị tham số, bạn cần để mã hóa các giá trị tham số của bạn trước khi thêm chúng như một phần của URL. Javascript/TypeScript cung cấp chức năng encodeURI() cho mục đích cụ thể đó.

Mã hóa URL chuyển đổi các ký tự thành định dạng có thể được truyền qua Internet. [w3Schools Reference]

Đây là cách bạn có thể khắc phục vấn đề này:

let encodedName = encodeURI('xyz+manwal'); 
let encodedURI = 'http://localhost:3000/page?name='+encodedName; 

//.. OR using string interpolation 
let encodedURI = `http://localhost:3000/page?name=${ encodedName }`; 

Trong cùng một cách, bạn có thể giải mã các thông số sử dụng decodeURI() phương pháp.

let decodedValue = decodeURI(encodedValue); 
+0

Giải pháp này tốt hơn, mã hóa trước khi sử dụng trong URL hoạt động tốt nhưng. Có các bên thứ ba tạo ra các liên kết, chứa các ký hiệu '+'. Các URL này đã hoạt động tốt trong phiên bản cũ của ứng dụng có trong 'C#'. Nhưng đối với chúng tôi (phiên bản mới của ứng dụng) trong góc, nó thậm chí không chấp nhận dấu '+' ngay lập tức chuyển đổi '+' thành '% 20'. – Manwal

+0

Khi tôi đang phục vụ góc cạnh với webpack, URL thay đổi của nó '+' thành '% 20'. Tôi muốn xem URL '+' đăng nhập. Trường hợp trong máy chủ khác trong apache php không chuyển đổi '+' vào bất cứ điều gì của nó giống nhau trong URL. – Manwal

Các vấn đề liên quan