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.
6 Réponses :
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);
}
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?
J'ai créé une fonction qui fait cela pour vous. Voici comment cela fonctionne:
$ startUrl . $ endUrl . $ 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
$ keydans 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;
}
};
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.
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 = "";
}
Le remplacement de l'URL est une mauvaise pratique. Vous devez faire deux parties pour travailler avec l'URL:
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'
Merci de votre aide
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;
}
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 p >
https://help.dreamhost.com/hc/en-us/articles/215747748-How-can-I-redirect-and-rewrite-my-URLs-with-an- htaccess-file- - exemple htaccess
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,
xml version = "1.0" encoding = "UTF-8"?> sitemaps.org/schemas/sitemap/0.9 "xmlns: video =" google .com / schemas / sitemap-video / 1.1 "> video post url / loc> yembed url / video: player_loc> TITLE video: title> DESCREPTIN video: description> IMAGE.jpg video: thumbnail_loc> 384 video: duration> vidéo: vidéo>