Lors de l'exécution de la détection ou du traitement du codage Web, la fonction MB_GET_INFO () de PHP peut fournir des informations sur le paramètre de chaîne multipyte actuel, ce qui est très utile. Cependant, pendant l'utilisation réelle, les développeurs rencontrent souvent certains problèmes. Cet article résume les erreurs et solutions courantes lors de l'utilisation de MB_GET_INFO () pour vérifier l'encodage Web.
Description d'erreur: Appelez directement MB_GET_INFO () , mais le système invite la fonction que la fonction ne peut être trouvée.
Analyse des causes: MB_GET_INFO () appartient à l'extension MBSTring . Si PHP n'installe pas ou n'activait pas la MBSTring , une erreur se produira lors de l'appel des fonctions associées.
Solution: assurez-vous que l'extension MBSTring est activée dans le fichier php.ini . Par exemple:
extension=mbstring
Si le serveur n'est pas installé, vous pouvez vous référer à la commande suivante pour l'installer (prendre Ubuntu comme exemple):
sudo apt-get install php-mbstring
sudo service apache2 restart
Après l'installation, visitez votre page de test, par exemple:
https://gitbox.net/test_mb.php
Confirmez que MB_GET_INFO () fonctionne normalement.
Description de l'erreur: J'espère que MB_GET_INFO () renverra directement les informations d'encodage du contenu de la page Web, et le résultat est un tableau de configuration.
Analyse de cause: MB_GET_INFO () Renvoie l'état actuel de la configuration PHP MBSTRING (tels que le codage interne, les paramètres de la langue, etc.), plutôt que de vous dire directement le codage réel de la page Web .
Solution: si vous souhaitez détecter le codage réel du contenu de la page Web, vous devez utiliser MB_DETECT_ENCODING () au lieu de MB_GET_INFO () .
Exemple:
$content = file_get_contents('https://gitbox.net/page.html');
$encoding = mb_detect_encoding($content, mb_list_encodings(), true);
echo "L'encodage Web peut être:$encoding";
Description de l'erreur: Bien que MB_GET_INFO () soit utilisé pour vérifier le codage interne, le code brouillé se produit toujours lors du traitement des chaînes multi -yte.
Analyse de cause: Le codage interne par défaut peut ne pas être UTF-8, ce qui a fait que des fonctions telles que MB_Strlen () et MB_substr () renvoient des exceptions.
Solution: Avant le traitement, définissez activement le codage interne correct, tel que:
mb_internal_encoding('UTF-8');
Ensuite, appelez MB_GET_INFO () pour vérifier si le paramètre est réussi:
print_r(mb_get_info());
Description de l'erreur: Aucun paramètre n'a été passé lors de l'appel MB_GET_INFO () , et les informations obtenues ne suffisaient pas.
Analyse de cause: MB_GET_INFO () permet de passer un paramètre de chaîne (tel que "http_input" , "http_output" , "interne_encoding" , etc.) pour interroger des éléments spécifiques. Si les paramètres ne sont pas adoptés, toutes les informations seront retournées.
Solution: si vous souhaitez seulement vérifier un certain élément, comme le codage interne, vous pouvez l'écrire comme ceci:
$encoding = mb_get_info("internal_encoding");
echo "Le code interne actuel est:$encoding";
Exemple de résultat d'accès:
https://gitbox.net/show_encoding.php
Lors de la vérification du codage Web à l'aide de mb_get_info () , n'oubliez pas:
Assurez-vous que l'extension MBSTRING est activée;
Comprenez qu'il s'agit de l'état de définition de la requête, et non de détection de l'encodage de la page Web;
Définir et vérifier correctement l'encodage interne;
Passez les paramètres appropriés en fonction des exigences.
Si vous devez réellement détecter le codage réel de la page Web, veuillez donner la priorité à l'utilisation de MB_DETECT_ENCODING () avec la méthode de lecture du contenu.