2016-04-14 3 views
0

Je développe un service et vous pouvez envoyer différents paramètres à ce service via le paramètre get.

Par exemple:

www.example.com?query=john & location = ...

Il est également possible d'envoyer des trémas à ce service.

Ex.

www.example.com?query=müller

Mon problème est maintenant, que je n'ai aucune influence de la façon dont les paramètres sont envoyés à mon service, donc j'ai décidé de le tester beaucoup et découvert, que si vous essayez de l'appeler via notre système interne (qui fonctionne avec Sharepoint) et si vous utilisez Internet Explorer, les choses commencent à devenir bizarres. tous, les paramètres d'abord ressembler à quelque chose comme ça, avec le deuxième exemple ci-dessus:

www.example.com?query=mller

Je peux déjà détecter, si quelqu'un en utilisant IE, mais je ne suis toujours pas sûr, comment je peux résoudre ce problème.

J'ai déjà essayé d'utiliser urlencode() (et beaucoup d'autres fonctions, mais elles ne changent pas vraiment le résultat), ce qui renvoie m%3Fller. Ma sortie désirée dans ce cas serait m%C3%BCller

Est-il possible de résoudre cela avec mon service ou est le problème dans Sharepoint? J'ai déjà reproduit le szenario avec un simple formulaire HTML avec tous les paramètres requis comme champs de texte simples et ça marche bien.

EDIT:

Ma sortie désirée est le tréma sous la forme correcte pour une url (ü => %C3%BC)

+1

La question est, où Est-ce que ça ressemble à ça? Selon où il est affiché, vous devriez regarder si la sortie est vraiment UTF-8/unicode au lieu de iso-8859-1 (latin1) ou une sorte de. En outre, en fonction de votre navigateur (version), il peut être envoyé en non-unicode –

+0

Il est déjà envoyé à mon navigateur comme ça, ce qui signifie, je ne reçois jamais vraiment le 'müller ', je reçois seulement – PrototypeX7

+0

Are vous déclarez quelque chose concernant les charsets/encodings n'importe où dans votre réponse ou page HTTP, ou laissez-vous simplement le choix au navigateur? (Vous avez peut-être deviné que ce dernier n'est pas très productif.) – deceze

Répondre

2

Mettez ce code sur l'une des premières lignes de votre code PHP:

header('Content-Type: text/html; charset=utf-8'); 

Il modifie le jeu de caractères à utf-8 qui prend en charge le Ü.

Vous pouvez également utiliser htmlentities pour changer le Ü-üuuml; mais si vous ne voulez pas que vous pouvez aussi utiliser urlencode qui retourne une chaîne dans laquelle tous les caractères non alphanumériques à l'exception -_. ont été remplacés par un signe de pourcentage (%) suivi de deux chiffres hexadécimaux et des espaces codés comme des signes plus (+).

Source:
http://php.net/manual/en/function.htmlentities.php
http://php.net/manual/en/function.urlencode.php

+0

L'a fait maintenant, mais cela ne change pas vraiment le résultat. Comme déjà mentionné dans ma question, je n'ai aucune influence sur la façon dont les lettres sont envoyées à mon service. 'urlencode' renvoie quelque chose de mieux que le , mais ce n'est pas ce que je veux. En fait, je dois juste envoyer ce paramètre à un autre site web (également avec get parameter), mais il devrait être dans le bon format, ce qui est (dans mon cas) '% C3% BC' pour le' ü' – PrototypeX7

0

Cela dépend de votre page encodage, je vous suggère s'il est possible de le changer en UTF-8, puis par exemple comme ceci:

<?php 
$txt = "müller"; 
$output = urlencode($txt); 
var_dump($output); 

Will vous renvoyer la valeur correcte:

string(11) "m%C3%BCller" 
+0

Mon problème est, que je n'obtiens jamais la valeur correcte (dans ce cas 'müller'), je reçois seulement le – PrototypeX7

+0

Quel encodage utilisez-vous? – Tomasz

+0

Devrait être UTF-8 'header ('Content-Type: texte/html; jeu de caractères = utf-8');' – PrototypeX7