PHP: Cortando strings (substr)

Palavras-chave: PHP, strings, substr, strpos

Um dos tipos de dados com mais recursos na linguagem PHP é sem dúvida as strings. A linguagem PHP possui inúmeras funções para manipulação de strings e uma das mais utilizadas é o substr.

O substr é responsável por retornar um pedaço da string. Para isto ele se utiliza de três parâmetros: a própria string, o índice inicial e a quantidade de caracteres a ser retornada.

Acontece que podemos utilizar também um índice negativo, desta forma o PHP analisa a string contando N caracteres a partir do final, e não a partir do início. Veja a seguir alguns exemplos:

<?php
$texto = "eu não sou besta pra tirar onda de herói";

echo substr($texto, 0, 16);  // eu não sou besta
echo "<br>\\n";
echo substr($texto, 11);     // besta pra tirar onda de herói
echo "<br>\\n";
echo substr($texto, 11, 9);  // besta pra
echo "<br>\\n";
echo substr($texto, -5);     // herói
echo "<br>\\n";
?>

Também podemos utilizar a substr() em combinação com a strpos(). A strpos detecta a posição que uma string ocorre dentro de uma expressão.

No exemplo seguinte, detectamos onde ocorre a palavra “http://” para retornar somente o domínio presente no texto:

<?php
$texto = "retornarei somente o domínio de http://www.pablo.blog.br";
$posicao = strpos($texto, 'http://');
echo substr($texto, $posicao+11); // pablo.blog.br
echo "\\n<br>";
?>
This entry was posted in PHP. Bookmark the permalink.

18 Responses to PHP: Cortando strings (substr)

  1. orgutus says:

    No caso de strings (acentuadas) em UTF-8, é melhor usar o mb_substr.

    Usando só o substr, a string resultante aprensenta erros de codificação. No mais, é a mesma sintaxe.

  2. Valeu, obrigado pela diga…

  3. Heigler says:

    Simples e objetivo.
    Parabéns.

    Apenas uma dúvida: Há como obter a posição final através do strpos? Seguindo o exemplo temos
    $texto = “retornarei somente o domínio de http://www.pablo.blog.br“;
    mas e caso eu quisesse resgatar a string de um formulário por exemplo onde eu jamais saberia a posição final exata para usar o substr.
    Exemplificando:
    $texto = “retornarei somente o domínio de http://www.pablo.blog.br mais conteúdo etc etc”;
    Quero usar parâmetros que retornem a string partindo de http até .br mas não sei a localização exata do final.

    Abraços,

    • David says:

      Nesse caso, é melhor você usar a função que pega a URL.

      $url = $_SERVER['REQUEST_URI'];

      echo $url;

  4. Djeison says:

    Muito bom, me ajudou muito essa dica;

    Abraço.

  5. muito boa a sua dica.. parabens

  6. Marcio says:

    Muito bom post, resolvi meu problema.

  7. Henrique Golinelli says:

    Outra excelente dica é usar o explode onde vc pode separar os campos por um delimitador
    linha=’3ALFA,3 – ALFA ANDROSTANEDIOL GLUCORONIDE,Androstenediol, 3 alfa diol,543,,28.05.006.1,2/9/2011 9:07,N’
    $array=explode(“,”,$linha);
    echo “Codigo $array[0] ,Nome $array[1], Sinonimo $array[2], Material $array[3] ,DadoObrigatorio $array[4],CodigoAMB$array[5],exaDtUltAlt$array[6],EhCurva$array[7] “;

  8. Alessandro says:

    Obrigado pela dica

  9. Sergio Porssionatto says:

    Meu senário é o seguinte, tenho uma tabela de logradouros, com os seguintes dados:

    rua , leopoldo
    avenida , trindade
    praça , barnabé

    a pergunta é: Como no PHP eu pego somente o que esta depois da VIRGULA ?????

    Não consigo achar resposta em lugar nenhum, me ajudem .

    Abraços !!!!

    • Thiago says:

      Na boa, a resposta está no tópico acima do seu. leia-o com atenção, que você terá a resposta que pediu.

    • Hugo Mendes says:

      Função:


      Espero ajuda, até a próxima!

    • Hugo Mendes says:

      Função:
      <?php
      function virgula($texto){
      $texto = substr($texto, (strpos($texto, ',')) + 1);
      echo $texto;
      }
      virgula("Rua , Leopoldo"); // Leopoldo
      virgula("Avenida , Trindade"); // Trindade
      virgula("Praça , Barnabé"); // Barnabé

      Espero ajuda, até a próxima!

  10. Roberto Vieira says:

    Galera,
    Tenho o seguinte cenário:

    Tenho um arquivo .txt que está com vários emails, mas tudo bagunçado:
    Ex: ; diecles ;

    Estou precisando ler este arquivo e listar apenas os emails:
    Ex: dfarcoverde@gmail.com;
    diecles@supermercados-arcoiris.com.br;

    Tenho os “” para poder pegar os e-mails, mas ainda não achei uma solução.
    Grato pela ajuda de todos e ótimo post.

  11. Roberto Vieira says:

    *Tenho os “colchetes” para…

  12. Temóteo says:

    Muito bom!
    Estou fascinado com PHP.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>