4
votes

PHP obtient les paramètres de chaîne d'URL?

Après avoir lu de nombreux articles ici, je n'ai pas trouvé de solution, j'ai donc besoin d'aide pour le faire ... Mes URL sont celles Exemple:

Page d'accueil

<?php $Ava_Sulg = $_SERVER["REQUEST_URI"];?>

<a class="x" href="/<?php echo $Ava_Sulg;?>">EN</a>
<a class="x" href="/al<?php echo $Ava_Sulg;?>">AL</a>
<a class="x" href="/it<?php echo $Ava_Sulg;?>">IT</a>

Requête

https://mywebsite.com/search/?q=YouTube
https://mywebsite.com/videos/search/?q=YouTube
https://mywebsite.com/news/search/?q=YouTube

https://mywebsite.com/al/search/?q=YouTube
https://mywebsite.com/al/videos/search/?q=YouTube
https://mywebsite.com/al/news/search/?q=YouTube

https://mywebsite.com/it/search/?q=YouTube
https://mywebsite.com/it/videos/search/?q=YouTube
https://mywebsite.com/it/news/search/?q=YouTube

Mon php & html pour changer la langue

https://mywebsite.com/
https://mywebsite.com/al/
https://mywebsite.com/it/
https://mywebsite.com/videos/
https://mywebsite.com/al/videos/
https://mywebsite.com/it/videos/
https://mywebsite.com/news/
https://mywebsite.com/al/news/
https://mywebsite.com/it/news/

donc j'autorise les utilisateurs à changer de langue, ce que je veux faire, c'est quand ils changent de langue, l'URL peut être l'une des ci-dessus, par exemple s'ils changent de langue de AL vers IT et l'url est https://mywebsite.com/al/videos/search/?q=YouTube avec PHP Je veux pour obtenir ce https://mywebsite.com/it/videos/search/?q=YouTube donc je veux changer de cette URL uniquement ( / al / to / it / code>) ou un exemple de IT vers EN ( / it / to Nothing ) mais que ce que je veux changer est au milieu, et sur la page d'accueil est différent, il est très difficile pour moi, comment puis-je faire cela est-ce possible ou non? J'espère trouver une solution ici, si possible! Merci beaucoup.


3 commentaires

Merci beaucoup pour votre aide, j'ai corrigé cela, mais maintenant je ne peux pas sortir le titre et les images de la vidéo, vidéo: titre et vidéo: miniature_loc,


Titre de la vidéo des image 302


sitemaps.org/schemas/sitemap/0.9 "xmlns: video =" google .com / schemas / sitemap-video / 1.1 "> video post url / yembed url / TITLE DESCREPTIN IMAGE.jpg 384


6 Réponses :


4
votes

Premièrement, je recommanderais que pour l'anglais, vous gardiez le / en / dans l'URL, ce sera plus facile à gérer.

Ensuite, d'extraire le code de langue et de le remplacer par une autre valeur vous pouvez utiliser

Vous pouvez utiliser preg_replace (REGEX)

$url = "https://mywebsite.com/en/foo";
$codes = [ 'it', 'fr', ...]; 
$urls = [];
foreach($codes as $code){
    $urls[$code] = preg_replace("(https://mywebsite.com/)[a-z]{2}(.*)", "$1". $code. "$2", $url);
}


6 commentaires

Merci pour votre aide, mais j'ai plus de 20 langues sur mon site Web, j'ai du mal à faire ce que je veux, beaucose je ne suis pas si bon pour le script, juste j'aime faire quelque chose, mais merci encore


Si vous avez plusieurs langues, il vous suffit d'envelopper l'une des deux options (la deuxième est recommandée) dans une boucle foreach


j'ai besoin de som code php pour faire cet exemple de fonction, si après l'url de domaine mywebsite.com est / it / ou / es / ou / fr / le supprimer.


J'ai mis à jour la réponse pour vous montrer un exemple de la façon dont vous pouvez l'implémenter avec une boucle foreach


merci encore pour votre aide, mais dans ce cas ne m'aide pas.


Eh bien, vous pourriez peut-être essayer d'expliquer votre problème d'une manière plus spécifique. Qu'essayez-vous de réaliser, pourquoi cette solution ne vous aide pas? Êtes-vous confronté à un bug ou quelque chose?



2
votes

J'ai créé une fonction qui fait cela pour vous. Voici comment cela fonctionne:

  1. Il supprime la langue choisie et tout ce qui suit de l'url et la place dans $ startUrl .
  2. Prend l'URL d'origine et en supprime la première partie, y compris la langue, et la place dans $ endUrl .
  3. Ajoute la langue fournie au milieu et assemble les trois parties, en les nommant $ newUrl et la renvoie.

REMARQUE: Cette fonction nécessite que vous spécifiiez la langue dans chaque URL, même pour l'anglais!

REMARQUE 2: Vous devrez peut-être changer la valeur de $ key dans les deux parties de suppression de la fonction si vous changez la structure de votre URL de base de https://mywebsite.com/ à, disons, https://mywebsite.com/public/ . J'ai ajouté des commentaires dans le code sur leur emplacement.

<a class="x" href="<?php echo createUrl($_SERVER["REQUEST_URI"], '/EN/');?>"></a>
<a class="x" href="<?php echo createUrl($_SERVER["REQUEST_URI"], '/AL/');?></a>
<a class="x" href="<?php echo createUrl($_SERVER["REQUEST_URI"], '/IT/');?></a>

Pour l'utiliser dans votre exemple, vous l'écrivez comme ceci:

function createUrl($url, $language){
    /*
    * FIX THE BEGINNING OF THE URL
    */
    // Explode the url into smaller parts and put into an array
    foreach((explode('/', $url)) as $key => $value){
        $expArray[$key] = $value;
    };

    // Remove the last part of the URL (including chosen language)
    foreach($expArray as $key => $value){
        if($key > 0){ /*<--This is one of the values you might need to be changed if your base url structure changes*/
            unset($expArray[$key]); 
        }
    }

    // Implode the array back to a string
    foreach($expArray as $key => $value){
        $startUrl = implode('/', $expArray);
    };

    

    /*
    * FIX THE END OF THE URL
    */
    // Explode the url into smaller parts and put into an array
    foreach((explode('/', $url)) as $key => $value){
        $expArray[$key] = $value;
    };

    // Remove the first part of the URL (including chosen language)
    foreach($expArray as $key => $value){
        if($key < 2){ /*<--This is the other value you might need to be changed if your base url structure changes*/
            unset($expArray[$key]); 
        }
    }

    // Implode the array back to a string
    foreach($expArray as $key => $value){
        $endUrl = implode('/', $expArray);
    };


    /* 
    * Put it all together
    */
    if(isset($endUrl)){
       $newUrl = $startUrl . $language . $endUrl;
       return $newUrl;
    }else{
       $newUrl = $startUrl . $language;
       return $newUrl;
    }
};


4 commentaires

merci pour votre aide, mais cela ne fonctionne pas lorsque je passe de mywebsite.com/al à l'exemple mywebsite.com/it qui se trouve sur ce lien mywebsite.com/al/it


C'est probablement parce que vous utilisez mywebsite.com/al et non https://mywebsite.com/al . Essayez d'ajuster les valeurs de $ key en conséquence.


Très bien, j'ai essayé cela dans un véritable environnement Apache au lieu de cet outil php-fiddle que j'ai utilisé auparavant et il semble que mon navigateur (chrome) supprime la partie https: // . J'ai mis à jour le code dans la réponse d'origine pour travailler avec ce scénario. Veuillez réessayer. P.S J'ai également ajouté une instruction if au bas du code pour éviter une erreur lorsque vous travaillez avec des URL courtes.


Merci de votre aide.



1
votes

Ma solution! 'pas parfait' beaucose si l'utilisateur recherche sur https://example.com/es/news/search/?q=news lorsque je change la langue, exemple de es à en, l'url changez comme ceci https://example.com/search/?q=news

if(isset($_GET["q"])) {
$qurl = $_GET["q"];
$surl = "/search/?q=";
}else{
$qurl = "";
$surl = "";
}


0 commentaires

2
votes

Le remplacement de l'URL est une mauvaise pratique. Vous devez faire deux parties pour travailler avec l'URL:

  1. Analyse de la langue et de l'URI sans langue
  2. Un bâtiment de n'importe quel URI avec la langue

Par exemple, l'analyse de la langue pourrait ressembler à:

function buildUri($path, $params = [], $language = '')
{
   $query = '';
   if (!empty($params)) {
       $query = '?' . http_build_query($params);
   }
   if (!empty($language)) {
       $language = '/' . $language ;
   } 
   return $language . $path . $query;
}

buildUri('/news/search', array('q' => 'YouTube')) // will return '/news/search/?q=YouTube'
buildUri('/news/search', array('q' => 'YouTube'), 'it') // will return 'it/news/search/?q=YouTube'

L'analyse de l'URI sans langue pourrait ressembler à

function extractUri($uri)
{
    $uri= preg_replace('/^\/[a-z]{2}\//', '', $uri);
    if ($uri[0] !== '/') {
        $uri = '/' . $uri;
    }
    return $uri;
}

extractUri('/search/?q=YouTube'); // will return '/search/?q=YouTube'
extractUri('/al/search/?q=YouTube'); // will return '/search/?q=YouTube'

Si vous avez une langue et un URI séparés, vous pouvez créer une URL cible, par exemple avec l'aide de la fonction suivante

function extractLanguage($uri)
{
    if (preg_match('/^\/[a-z]{2}\//', $uri, $matches)) {
        $language = trim($matches[0], '/');
    } else {
       $language = ''; // or default language
    }   
    return $language;
}

extractLanguage('/search/?q=YouTube'); // will return empty string
extractLanguage('/al/search/?qURIuTube'); // will return 'al'


1 commentaires

Merci de votre aide



6
votes

Puisque vous êtes uniquement intéressé par la manipulation du composant path , vous pouvez simplement utiliser parse_url pour extraire le composant path au lieu de regex:

                           https://mywebsite.com/ + en = https://mywebsite.com/
                           https://mywebsite.com/ + al = https://mywebsite.com/al/
                           https://mywebsite.com/ + it = https://mywebsite.com/it/
                        https://mywebsite.com/al/ + en = https://mywebsite.com/
                        https://mywebsite.com/al/ + al = https://mywebsite.com/al/
                        https://mywebsite.com/al/ + it = https://mywebsite.com/it/

                    https://mywebsite.com/videos/ + en = https://mywebsite.com/videos/
                    https://mywebsite.com/videos/ + al = https://mywebsite.com/al/videos/
                    https://mywebsite.com/videos/ + it = https://mywebsite.com/it/videos/
                 https://mywebsite.com/al/videos/ + en = https://mywebsite.com/videos/
                 https://mywebsite.com/al/videos/ + al = https://mywebsite.com/al/videos/
                 https://mywebsite.com/al/videos/ + it = https://mywebsite.com/it/videos/

   https://mywebsite.com/videos/search/?q=YouTube + en = https://mywebsite.com/videos/search/?q=YouTube
   https://mywebsite.com/videos/search/?q=YouTube + al = https://mywebsite.com/al/videos/search/?q=YouTube
   https://mywebsite.com/videos/search/?q=YouTube + it = https://mywebsite.com/it/videos/search/?q=YouTube
https://mywebsite.com/al/videos/search/?q=YouTube + en = https://mywebsite.com/videos/search/?q=YouTube
https://mywebsite.com/al/videos/search/?q=YouTube + al = https://mywebsite.com/al/videos/search/?q=YouTube
https://mywebsite.com/al/videos/search/?q=YouTube + it = https://mywebsite.com/it/videos/search/?q=YouTube

                        /videos/search/?q=YouTube + en = /videos/search/?q=YouTube
                        /videos/search/?q=YouTube + al = /al/videos/search/?q=YouTube
                        /videos/search/?q=YouTube + it = /it/videos/search/?q=YouTube
                     /al/videos/search/?q=YouTube + en = /videos/search/?q=YouTube
                     /al/videos/search/?q=YouTube + al = /al/videos/search/?q=YouTube
                     /al/videos/search/?q=YouTube + it = /it/videos/search/?q=YouTube

La fonction ci-dessus pourrait être simplifiée si vous avez http_build_url fonction disponible. Entrée et sortie de fonction:

function generateurl($url, $lc) {
    $parts = parse_url($url);
    $parts['path'] = preg_replace('@^/[a-z][a-z]/@', '/', $parts['path']);
    if ($lc !== 'en') {
        $parts['path'] = '/' . $lc . $parts['path'];
    }
    $url = '';
    if (isset($parts['scheme'])) $url .= $parts['scheme'] . '://';
    if (isset($parts['host'])) $url .= $parts['host'];
    if (isset($parts['port'])) $url .= ':' . $parts['port'];
    if (isset($parts['path'])) $url .= $parts['path'];
    if (isset($parts['query'])) $url .= '?' . $parts['query'];
    if (isset($parts['fragment'])) $url .= '#' . $parts['fragment'];
    return $url;
}


2 commentaires

sur html, comment ajouter l'url maintenant? EN ?


En supposant que l'URL est absolue, c'est-à-dire qu'elle commence par https ou / , vous devez FR



0
votes

Je suggère d'utiliser la configuration .htaccess dans le serveur Web Apache, dans lequel vous pouvez gérer facilement tout type de demande avec des paramètres de masquage, et vous pouvez facilement rediriger vers vos autres URL.

Les URL ci-dessous vous aideront.

http://www.htaccess-guide.com/ - Documentation officielle

https://help.dreamhost.com/hc/en-us/articles/215747748-How-can-I-redirect-and-rewrite-my-URLs-with-an- htaccess-file- - exemple htaccess


0 commentaires