8
votes

Problème avec la génération d'images SVG dynamique

J'essaie d'écrire un script côté serveur (PHP) pour générer une image SVG basée sur l'entrée de l'utilisateur. J'utilise le code suivant:

<?php

echo '<?xml version="1.0" standalone="no"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

<head><meta http-equiv="Content-Type" content="svg+xml" /></head>

<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">

<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>

</svg>';

?>


0 commentaires

3 Réponses :


28
votes

Selon le page SVG sur Wikipedia , SVG doit être servi comme image svg + xml . Voir aussi: 1.2 Type MIME SVG, Extension de nom de fichier et type de fichier Macintosh < / a>

la méta suivante: xxx

ne définit pas la manière dont un contenu est servi à partir d'un serveur - il est plus utile de donner cette information, Pour les pages HTML, lorsque vous ne pouvez pas définir la façon dont il est servi ...
Et, je ne sais pas si le méta-élément est valide dans le
Spécifications SVG - - Je vais vous laisser vérifier que ^^



Ce que vous devez faire, ici, c'est Envoyer un en-tête HTTP à partir de votre serveur, indiquant le type de contenu de vos données.

Ceci est effectué à l'aide du PHP en-tête fonction; Dans votre cas: xxx

Remarque:

  • J'ai supprimé le et tags; Je ne sais pas si le doit être supprimé, mais, comme il était vide ...
  • J'ai ajouté l'appel à l'en-tête fonction
  • Le cercle rouge SVG est correctement affiché par Firefox - il semble donc fonctionner; -)

    J'espère que cela aide!


2 commentaires

Merci :) J'étais coincé cela pendant beaucoup de temps. Cela fonctionne parfaitement maintenant.


@Pascal: Oui, il n'y a pas de tête dans svg, et l'élément méta est utilisé différemment.



0
votes

J'ai réussi à utiliser svg dans un document XHTML récemment.

<?xml version='1.0'?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:svg="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <head><title>test</title></head>
    <body>
    <svg:svg id="display" width="500" heigth="500" viewBox="0 0 500 500">
        <svg:rect width="50" height="50" x="100" y="100" fill="red" stroke="black" />
    </svg:svg>
    </body>
</html>


2 commentaires

Vous n'avez pas besoin d'utiliser des préfixes sur chaque élément, il suffit de mettre xmlns = " w3.org/2000 / SVG "sur l'élément" SVG> à l'extérieur ".


Oh vraiment, dois-je changer les xmlns: svg?



3
votes

Il suffit de dire que ceci:

<?xml version='1.0'?>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head><title>test</title></head>
    <body>
    <svg id="display" width="500" heigth="500" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
        <rect width="50" height="50" x="100" y="100" fill="red" stroke="black" />
    </svg>
    </body>
</html>


0 commentaires