質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

HTML

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

Q&A

解決済

2回答

3599閲覧

DBに保存したsvgコードを取得し、HTMLで画像として表示する

Dash_003

総合スコア27

SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

HTML

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

0グッド

0クリップ

投稿2020/07/29 06:15

編集2020/07/29 06:44

やろうとしている事

[前提]
・DBに存在するテーブルのカラムにSVGのコードを保存している(text型のカラム)

1、PHPのバックエンド側でDBからSVGのコードを取得
2、取得したコードを変数に保存、viewへ渡す
3、受け取った変数、その中身をHTML上で表示
4、コードではなく、画像が表示される(想定)

問題

・画像ではなく、SVGのコードがそのまま表示される

原因は、コードを変数に代入してview側へ渡すときstringなので
「" <svg>~</svg> "」
といったように表示はされないダブルクォーテーションが実はくっついている事でした。

変数を表示するのではなく、変数に持たせているSVGコードをHTML内にべた書きしたところ
画像として表示されたので原因は間違いないと思います。

何とかして見えないダブルクォーテーションを認識しない、文字列として扱わない、HTMLコードとして扱う
という事をしたいのですが、似ている例がないのか情報が見つかりません。

どなたか対処法をご存じでしたら教えていただきたいです。よろしくお願いいたします。

補足

取得しているsvgコードは以下です

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid meet" viewBox="0 0 250 150" width="250" height="150"><defs><path d="M68.18 31.31L192 31.31L192 108.31L68.18 108.31L68.18 31.31Z" id="chMAGfJHU"></path><path d="M192 69.81L68.18 69.81" id="h1FLQ4bfrc"></path><path d="M130.09 108.31L130.09 69.81" id="a16eyZmJB1"></path></defs><g><g><g><use xlink:href="#chMAGfJHU" opacity="1" fill="#f9f9f9" fill-opacity="1"></use><g><use xlink:href="#chMAGfJHU" opacity="1" fill-opacity="0" stroke="#000000" stroke-width="2" stroke-opacity="1"></use></g></g><g><g><use xlink:href="#h1FLQ4bfrc" opacity="1" fill-opacity="0" stroke="#0b1923" stroke-width="1" stroke-opacity="1"></use></g></g><g><g><use xlink:href="#a16eyZmJB1" opacity="1" fill-opacity="0" stroke="#0b1923" stroke-width="1" stroke-opacity="1"></use></g></g></g></g></svg>

バックエンド側(PHP Symfony)では
return $this->render(html.twig,['svg' => $svg]);
という形でhtmlをリターンしています。

HTML(Twig)側では
{{ svg }}
という形で表示しています。

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

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

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

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

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

maisumakun

2020/07/29 06:17

PHPは何かしらのフレームワークを使っていますか?直書きですか?
Dash_003

2020/07/29 06:34

フレームワークはSymfony4.4.xを使用しています テンプレートエンジンはTwigです
maisumakun

2020/07/29 06:40

Twigの側ではどのように書いていますか?
Dash_003

2020/07/29 06:44

補足に追記いたしました
guest

回答2

0

ベストアンサー

環境によりますが、Twigから書いた通りの出力を行うには、{{ val|raw }}のような指定が必要な場合もあります(参考)。

投稿2020/07/29 06:52

maisumakun

総合スコア146018

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

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

Dash_003

2020/07/29 07:03

回答いただいた形式で無事表示することができました。文字列として扱われている=セキュリティの為エスケープされているという観点に全然及んでいなかったので思いつきもしませんでした。。。 ありがとうございました<(_ _)>
guest

0

svgタグまできちんと書かれているならajaxなどで受け取って、
適当な場所を指定してアペンドしてやればよいでしょう

投稿2020/07/29 06:17

yambejp

総合スコア116724

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

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

yambejp

2020/07/29 06:18

どうしてもうまくいかない場合は、imgタグにbase64エンコードした文字列をsrcで 指定するというやり方もあります。ただしimgタグで呼び出したsvgはやや制限があります
Dash_003

2020/07/29 06:38

アペンドをしたら文字列として認識されているコードがHTMLコードとして認識されるのでしょうか?
yambejp

2020/07/29 06:46

よく考えたら、appendじゃなくてinnerHTMLがよいかもしれません こんな感じにすればインラインに埋め込めます <script> window.addEventListener('DOMContentLoaded', ()=>{ fetch(url).then(res=>res.text()).then(txt=>document.querySelector('#view').innerHTML=txt) }); </script> <div id="view"></div>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問