De pas respecter les majuscules dans une chaine

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par sff, 4 Décembre 2016.

Tags:
  1. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    526
    J'aime reçus:
    0
    Bonjour, j'ai un petit soucis. En effet dans cette ligne ci dessus, un mot est mis en gras respectant à la lettre les majuscules

    Code:
    $country_name = str_replace($_POST['keyword'], '<b>'.$_POST['keyword'].'</b>', $rs['name']);
    Admettons que $rs['name'] = 'Texte';

    Si $_POST['keyword'] = Texte

    Texte devient Texte

    Si $_POST['keyword'] = TEXTE

    TEXTE reste TEXTE

    Si $_POST['keyword'] = texte

    texte reste texte

    Comment faire pour ne pas tenir des compte des majuscules et minuscule pour le mot soit toujours mis en gras ?

    Merci pour votre aide.
     
  2. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    138
    J'aime reçus:
    0
  3. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    526
    J'aime reçus:
    0
    Tu serais comment faire aussi pour ne pas tenir compte des tirets du 6 également ?
     
  4. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    138
    J'aime reçus:
    0
    Le tiret du 6 c'est l'underscore ?
    Tu cherche à faire exactement ?
    Si c'est pour un traitement similaire entre - et _ faire une recherche sur les deux. str_replace accepte des array, donc tu peux mettre les deux possibilités. Y a les regex aussi, mais tant qu'on peux éviter, c'est mieux.
     
  5. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    526
    J'aime reçus:
    0
    Le problème se situe sur mon script de recherche de villes. Si je tape par exemple "chateauneuf-sur-loire" il va bien trouver le resultat de la bdd car dans la bdd la ville est écrit avec les tirets.

    Par contre si j'écris chateauneuf sur loire, la il ne trouve pas la ville. Or j'aimerais qu'avec ou sans tirets, la ville soit trouvée.

    Script : http://ad49eb1cf7.url-de-test.ws/test5/

    code :

    Code:
    // connexion bdd
    
    if (isset($_REQUEST['query'])) {
    
        $query = $_REQUEST['query'];
    	
        $principalquery = $mysqli->query("SELECT * FROM cities WHERE name LIKE '%{$query}%' OR postal_code LIKE '%{$query}%'");
    	$array = array();
       
    while ($row = $principalquery->fetch_assoc()) {
    	
            $array[] = array (
                'label' => $row['name'].', '.$row['postal_code'],
                'value' => $row['name'],
            );
        }
    
        echo json_encode ($array);
    }
    je n'arrive pas à résoudre le problème
     
  6. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    526
    J'aime reçus:
    0
    Le problème est résolu avec ceci, mais les apostrophes ne passent pas non plus.

    $vowels = array(" ", "-");
    $query = str_replace($vowels, "-", $_REQUEST['query']);
     
  7. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    138
    J'aime reçus:
    0
    Ajoute l'apostrophe dans ta liste :
    $vowels = array(" ", "-", "'");

    Le tiret n'est pas nécessaire, non ?
     
  8. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 919
    J'aime reçus:
    272
    Ce serait plus malin d'enregistrer la version "slugifiée" en base de données:

    PHP:
    <span class="syntaxdefault">function slug</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">)<br />{<br /></span><span class="syntaxdefault">    $transliterator </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Transliterator</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">createFromRules</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"::Latin-ASCII; ::Lower; [^[:L:][:N:]]+ > '-';"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    return trim</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$transliterator</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">transliterate</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">),</span><span class="syntaxdefault"> </span><span class="syntaxstring">'-'</span><span class="syntaxkeyword">);<br />}</span><span class="syntaxdefault"></span>
    Src: https://www.matthecat.com/supprimer-les-accents-dune-chaine-en-php/
     
  9. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    526
    J'aime reçus:
    0
    Merci beaucoup, ca m'aide beaucoup, mais les apostrophes ne passent toujours pas.

    Par exemple il ne reconnait pas la ville de "pont l'abbé". Il la reconnait jusqu’à "pont l" mais pas plus loin.
     
  10. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    526
    J'aime reçus:
    0
    Ton code remplace les apostrophes par des tirets. Comment faire pour que ca ne soit pas le cas ?

    Merci
     
  11. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    526
    J'aime reçus:
    0
    Le problème se situe sur plusieurs type de nom de ville. Si je tape Saint Etienne, il va bien trouver Saint-Etienne dans la base de donnée

    Mais sur les exemples suivant ca ne fonctionne pas :

    La grande-motte (comment faire pour que ca fonctionne en ne mettant que des espaces entre les mots ? )

    Pont l'Abbé (comment faire pour qu'une apostrophe fonctionne ?)

    Code:
    function slug($str)
    {
        $transliterator = Transliterator::createFromRules("::Latin-ASCII; ::Lower; [^[:L:][:N:]]+ > '-';");
        return trim($transliterator->transliterate($str), '-');
    }
    
    function connect() {
    	return new PDO('mysql:host=localhost;dbname=xxx', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    }
    
    $pdo = connect();
    
    $keyword = slug($_POST['keyword']);
    
    $sql = "SELECT * FROM cities WHERE name LIKE '%".$keyword."%' OR postal_code LIKE '%".$keyword."%' ORDER BY name ASC LIMIT 0, 10";
    
    echo "SELECT * FROM cities WHERE name LIKE '%{$keyword}%' OR postal_code LIKE '%{$keyword}%' ORDER BY name ASC LIMIT 0, 10";
    
    $query = $pdo->prepare($sql);
    $query->bindParam(':keyword', $keyword, PDO::PARAM_STR);
    $query->execute();
    $list = $query->fetchAll();
    
    if(empty($list)) { 
    
    	echo 'Aucun code postal ne correspond à votre saisie !';
    
    }else{
    
    	foreach ($list as $rs) {
    		
    		$name = preg_replace('.' . preg_quote($_POST['keyword']) . '.ui', '<b>\0</b>', $rs['name']);
    		
    		echo '<li '.$style.' onclick="set_item(\''.str_replace("'", "\'", $rs['name']).'\')">'.$name.' ['.$rs['postal_code'].']</li>';
    	}
    }
     
  12. niap
    niap WRInaute discret
    Inscrit:
    17 Octobre 2009
    Messages:
    138
    J'aime reçus:
    0
    Comme te l'as suggéré Spout il vaudrait mieux enregistrer le titre dans une version "nettoyée".
    Et quand tu fais une recherche, tu applique la même fonction de nettoyage sur ton texte de recherche et tu compare les deux versions nettoyées.
     
  13. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    526
    J'aime reçus:
    0
    Oui mais du coup cela m'affichera des villes dans apostrophes ni espace, non ?

    Pont-l'abbé sera enregistré comme ceci : Pont L Abbe

    La grande-motte comme ceci : La grande motte

    Bref comme remettre les accents, tirets et espaces lors de l'affichage ?
     
  14. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 919
    J'aime reçus:
    272
    Non, avoir 2 champs:
    - name: Pont l'Abbé
    - slug: pont-l-abbe

    Code:
    SELECT * FROM cities WHERE slug=:slug
    C'est très courant cette façon de faire.
     
  15. sff
    sff WRInaute impliqué
    Inscrit:
    2 Février 2005
    Messages:
    526
    J'aime reçus:
    0
    D'accord je viens de comprends. En effet ca sera plus simple. Merci
     
Chargement...
Similar Threads - respecter majuscules chaine Forum Date
Logo Google+ : attention de respecter le design! Google+ 6 Octobre 2014
Règles à respecter sur le choix d'un nom de domaine Noms de domaine et référencement 4 Avril 2013
Régles à respecter pour la création d'un sitemap? Crawl et indexation Google, sitemaps 20 Janvier 2012
Méthode utilisée pour respecter le référencement d'un site existant URL Rewriting et .htaccess 18 Janvier 2010
Méthode utilisée pour respecter le référencement d'un site déjà existant Débuter en référencement 16 Janvier 2010
Impact des majuscules sur le référencement Débuter en référencement 18 Octobre 2019
Empêcher les majuscules dans les URL Débuter en référencement 27 Avril 2018
Dans les URL, évitez les accents, caractères spéciaux et majuscules Débuter en référencement 28 Mars 2012
Redirection avec majuscules vers sans majuscules URL Rewriting et .htaccess 24 Juillet 2011
Gestion des Majuscules [script] - PHP / javascript Développement d'un site Web ou d'une appli mobile 9 Mars 2011
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice