🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1067閲覧

画像とテキストを紐づけてランダム表示にしたいが特殊文字の処理がわからない

AyaWeb4

総合スコア4

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/12/24 14:35

##実現したいこと
ポートフォリオとしてドイツ語の単語ゲームを制作途中で、サーバーにデプロイしたところ、
ドイツ語特有の特殊文字(ä, ö, ü)を含む単語の画像が表示されません。
画像のファイル名と単語をJavascriptで紐づけてランダムに表示させているのですが、
特殊文字がサーバー上では読み込まれていないようです。

##コード

main.js

1 2 const question = document.getElementById('js-image'); 3 const target = document.getElementById('js-target'); 4 const correctSound = document.getElementById('js-correct'); 5 const tipeSound = document.getElementById('js-tiping'); 6 const gameSetSound = document.getElementById('js-gameSet'); 7 const start = document.getElementById('js-start'); 8 const replay = document.getElementById('js-replay'); 9 10 const words = [ 11 'Hund','Katze','Vogel','Pinguin','Frosch', 12 'Schwein','Elefant','Löwe','Hase','Kuh', 13 'Schaf','Schlange','Nilpferd','Schildkröte','Wal', 14 ]; //ここではLöweとSchildkröteがエラーに該当します。 15 16 let word; 17 let loc = 0; 18 let startTime; 19 let isPlaying = false; 20 21 function setQuiz(){ 22 word = words.splice(Math.floor(Math.random()* words.length),1)[0]; 23 loc = 0; 24 target.textContent = word; 25 const images = [ 26 'img/Hund.png','img/Katze.png','img/Vogel.png','img/Pinguin.png','img/Frosch.png', 27 'img/Schwein.png','img/Hase.png','img/Kuh.png','img/Nilpferd.png','img/Elefant.png', 28 'img/Schildkröte.png','img/Wal.png','img/Löwe.png','img/Schaf.png','img/Schlange.png', 29 ]; 30 let img; 31 img = `img/${word}.png`; //ファイル名と単語を紐づけ 32 question.src = img; 33 question.classList.add('c-img__pc-size'); 34 } 35 36 function gameReplay() { 37 question.style.display = 'none'; 38 replay.href = 'section1_mobile.html'; 39 replay.textContent = 'Replay?'; 40 replay.classList.add('c-btn','c-btn-replay'); 41 } 42 43 44 target.addEventListener('click', ()=> { 45 if (isPlaying === true){ 46 return; 47 } 48 isPlaying = true; 49 startTime = Date.now(); 50 target.classList.remove('c-btn','c-btn-start','p-start-btn__text'); 51 start.classList.add('c-start-btn_active','c-start-btn_active2'); 52 target.classList.add('p-game__text'); 53 setQuiz(); 54 }); 55 56 document.addEventListener('keydown', e => { 57 if (e.key !== word[loc]) { 58 return; 59 } 60 tipeSound.currentTime = 0; 61 tipeSound.play(); 62 loc++; 63 target.textContent = '_'.repeat(loc) + word.substring(loc); 64 65 if (loc === word.length){ 66 if (words.length === 0) { 67 const elapsedTime = ((Date.now() - startTime) / 1000).toFixed(2); 68 const result = document.getElementById('js-result'); 69 result.textContent = `Fertig! ${elapsedTime} Sekunden!`; 70 gameSetSound.play(); 71 setTimeout(gameReplay,1000); 72 return; 73 } 74 correctSound.currentTime = 0; 75 correctSound.play(); 76 setQuiz(); 77 } 78 }); 79

HTML

1<!DOCTYPE html> 2<html lang="de"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <link rel="preconnect" href="https://fonts.gstatic.com"> 7<link href="https://fonts.googleapis.com/css2?family=Shrikhand&display=swap" rel="stylesheet"> 8<script src="https://kit.fontawesome.com/749f9d0226.js" crossorigin="anonymous"></script> 9 <link rel="stylesheet" href="css/ress.css"> 10 <link rel="stylesheet" href="css/style.css"> 11 </head> 12 <body> 13 <div class="l-main l-main-mobile-mode"> 14 <div class="l-desc__wrapper"> 15 <p class="p-game-desc__text" id="js-hide">Type as fast as you can!</p> 16 <p class="p-sound__text"><i class="fas fa-volume-up fa-lg c-img-volume"></i> turn on the sound!</p> 17 </div> 18 <ul class="l-game__wrapper"> 19 <li class="c-game-img"><img class="u-image_margin" id="js-image"><a id="js-replay"></a></li> 20 <li class="c-btn c-btn-start" id="js-start"> 21 <p class="p-start-btn__text" id="js-target">Start!<br> </p> 22 </li> 23 <li class="c-result"> 24 <p class="p-result__text" id="js-result"></p> 25 </li> 26 </ul> 27 <div class="l-back__wrapper"><a class="c-btn-back" href="index.html"> 28 <p class="p-btn-back__text"><i class="fas fa-angle-left c-img-left"></i> Top</p></a></div> 29 30 <audio id="js-correct" src="audio/correct.mp3"></audio> 31 <audio id="js-tiping" src="audio/tipe.mp3"></audio> 32 <audio id="js-gameSet" src="audio/gameSet.mp3"></audio> 33 <footer class="l-footer"> 34 <p class="p-footer__copyright"><small>&copy; 2020 Allrights Reserved.</small></p> 35 </footer> 36 <script src="main.js"></script> 37 </body> 38</html>

##エラーの内容
ファイル名と単語を紐づけて、ランダム表示する方法自体が
無理矢理感があるなとは思っていたものの、
ローカルで開発している間は問題がなかったためこのまま進めていました。
しかし、サーバーにデプロイすると、特殊文字の含まれた画像だけが表示されません。
ファイル名に特殊文字が使われているからサーバー側で認識されていないとすると、
どのように画像とテキストを紐づければ良いか、代替策が思いつきません。
完全独学なので、醜いコードかと思いますが何かアドバイスいただけますと、
非常に助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

URLエンコードして見てはいかがでしょう。

【encodeURI() - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

投稿2020/12/24 14:44

kei344

総合スコア69596

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AyaWeb4

2020/12/25 01:12

早速のアドバイスありがとうございます! ご教示いただいたURLエンコードを使ったらうまく画像が表示されるように なりました。おかげさまでまた一つ学びが増えました。本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問