it-swarm.com.de

Nicht erfasster URIError: URI fehlerhaft - Jquery UI-Registerkarten unter Windows

In einer lokalen Windows-Entwicklungsumgebung verwende ich Jquery-UI-Registerkarten. Ich teste mit ihrem Demo Code

<div id="tabs">
  <ul>
    <li><a href="#tabs-1">Nunc tincidunt</a></li>
    <li><a href="#tabs-2">Proin dolor</a></li>
    <li><a href="#tabs-3">Aenean lacinia</a></li>
  </ul>
  <div id="tabs-1">
    <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. </p>
  </div>
  <div id="tabs-2">
    <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie</p>
  </div>
  <div id="tabs-3">
    <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede ve</p>

  </div>
</div>

Das Problem ist, dass ich für diese Funktion einen "Unrecord URIError: URI missgebildet" erhalte:

function isLocal( anchor ) {
    return anchor.hash.length > 1 &&
        decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
Uncaught URIError: URI malformed
            decodeURIComponent( location.href.replace( rhash, "" ) );
} 

Ich vermute, das liegt an der URI in der Windows-Umgebung, die so aussieht:

file:///C:/Work/my%20project/yadda%20ac%E7%F5es%20yadda/submenu.html#tabs-1

Wie kann ich es auf lokalem Windows arbeiten lassen, da meine Kunden es vor dem Live-Betrieb sehen wollen? Ich habe es getestet und weiß, dass dies durch die Kodierung der Sonderzeichen auf dem URI verursacht wird (wie auf dem Wort "acções"). Gibt es eine Möglichkeit, dass es auch mit Sonderzeichen funktioniert?

Ich weiß, dass ich das Problem einfach beheben kann, indem Sie diese Zeichen entfernen und die Datei/den Ordner umbenennen. Ich hätte jedoch gerne eine Lösung, die für den Fall, dass sie die Ordner noch einmal umbenennen möchten, mehr Client-Beweis ist (und alles geht einfach nur CABOOM ins Gesicht) ).

18
Catarina Lou

Dies ist eine Folge der decodeURIComponent-Methode, bei der davon ausgegangen wird, dass die Prozentkodierung der angegebenen Zeichenfolge in UTF-8 enthalten ist (siehe Schritt 4.d.vii.8 der Decode-Operation in Abschnitt 15.1.3 von ECMAScript) . Ihre Beispielzeichenfolge:

"file:///C:/Work/my%20project/yadda%20ac%E7%F5es%20yadda/submenu.html#tabs-1"

Enthält die in Prozent dekodierten Bytes 0xE7 0xF5, die in einer gültigen UTF-8-Zeichenfolge nicht hintereinander vorkommen können (sie repräsentieren die beiden Zeichen çõ in Windows-1252). Dementsprechend löst decodeURIComponent eine URIError-Ausnahme aus.

Eine Möglichkeit, dieses Problem zu lösen, das ich noch nicht getestet habe, besteht darin, sicherzustellen, dass Ihre Webseite mit der UTF-8-Zeichencodierung und nicht mit ISO-8859-1 bedient wird. Dies ist die Standardeinstellung. 

Fügen Sie dazu ein META-Tag wie folgt hinzu:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

(Das ideale Element besteht darin, einen Content-Type-Header mit dem Zeichensatz zu enthalten. Dies ist jedoch im Allgemeinen beim lokalen Testen des Dateisystems nicht möglich.)

Stellen Sie außerdem sicher, dass die Webseiten selbst in UTF-8 codiert sind.


Wo erscheint Ihre Beispielzeichenfolge auch auf Ihren Webseiten? Wie wird es erzeugt? Mit welchem ​​Browser haben Sie das Verhalten getestet? Die Antwort wird mir helfen, Ihnen zu sagen, was ich tun soll.

14
Peter O.

Dies ist ein Fehler in jquery - http://bugs.jqueryui.com/ticket/9518 - für Nicht-UTF8-URLs. Ich hatte das gleiche Problem und habe es gelöst. Da ich die Kodierung meiner Seite nicht in UTF-8 ändern konnte, habe ich schließlich mein Jqueryui gepatcht und die Lösung von Rainer Plumer als Workaround verwendet. Ich musste sie jedoch zweimal verwenden, da ich einige URI-Parameter mit kodierten URIs habe. So war meine Lösung 

decodeURIComponent( unescape( unescape(s)) )

Im Allgemeinen sollte es wahrscheinlich eine Wiederholungs-bis-Schleife geben, bis die gleichen Ergebnisse erzielt werden. Diese Problemumgehung ist mit Sicherheit keine saubere Lösung. Die saubere Lösung wird hier gefragt: 

Formular mit get-Methode in einer nicht UTF-8-Codierung absenden

PS: das gesamte Patch der Jquery-Benutzeroberfläche:

function isLocal( anchor ) {
        return anchor.hash.length > 1 && 
                decodeURIComponent( unescape( unescape( anchor.href.replace( rhash, "" ) ) ) ) ===
                        decodeURIComponent( unescape( unescape( location.href.replace( rhash, "" ) ) ) );
}
5
TMS

Ich hatte den gleichen Fehler "Uncaught URIError: URI malformed" und habe ihn folgendermaßen behoben:

decodeURIComponent(encodeURIComponent(mystring))

Hinweis: Das Ändern der Codierung meiner Seite in UTF-8 oder das Hinzufügen von unescape () hat bei mir nicht funktioniert.

4
Sebastien Cornu

Etwas wie das ?

s = "file:///C:/Work/my%20project/yadda%20ac%E7%F5es%20yadda/submenu.html#tabs-1";
decodeURIComponent( unescape(s) )
3
Rainer Plumer

Ich hatte dieses Problem selbst. Ich konnte keinen Weg finden, um meine Quellzeichenfolge zu bereinigen, also habe ich die Ausnahme einfach umgangen, so dass die Daten weiterhin geladen werden würden.

try {
    myVal = decodeURIComponent(sourceVal);
} catch (err) {
    myVal = "";
}
0
Aryeh Beitz